diff --git a/solutions/basic-types/char-bool.md b/solutions/basic-types/char-bool.md index e69de29..4920211 100644 --- a/solutions/basic-types/char-bool.md +++ b/solutions/basic-types/char-bool.md @@ -0,0 +1,75 @@ +1. +```rust +use std::mem::size_of_val; +fn main() { + let c1 = 'a'; + assert_eq!(size_of_val(&c1),4); + + let c2 = 'ไธญ'; + assert_eq!(size_of_val(&c2),4); +} +``` + +2. +```rust +fn main() { + let c1 = 'ไธญ'; + print_char(c1); +} + +fn print_char(c : char) { + println!("{}", c); +} +``` + +3. +```rust +fn main() { + let _f: bool = false; + + let t = false; + if !t { + println!("hello, world"); + } +} +``` + +4. +```rust +fn main() { + let f = true; + let t = true || false; + assert_eq!(t, f); +} +``` + +5. +```rust +fn main() { + let v0: () = (); + + let v = (2, 3); + assert_eq!(v0, implicitly_ret_unit()) +} + +fn implicitly_ret_unit() { + println!("I will returen a ()") +} + +// don't use this one +fn explicitly_ret_unit() -> () { + println!("I will returen a ()") +} +``` + +6. +```rust +use std::mem::size_of_val; +fn main() { + let unit: () = (); + // unit type does't occupy any memeory space + assert!(size_of_val(&unit) == 0); +} +``` + + diff --git a/solutions/basic-types/functions.md b/solutions/basic-types/functions.md index e69de29..770c93f 100644 --- a/solutions/basic-types/functions.md +++ b/solutions/basic-types/functions.md @@ -0,0 +1,55 @@ +1. +```rust +fn main() { + // don't modify the following two lines! + let (x, y) = (1, 2); + let s = sum(x, y); + + assert_eq!(s, 3); +} + +fn sum(x: i32, y: i32) -> i32 { + x + y +} +``` + +2. +```rust +fn main() { + print(); +} + +// replace i32 with another type +fn print() -> () { + println!("hello,world"); +} +``` + +3. +```rust +fn main() { + never_return(); +} + +fn never_return() -> ! { + // implement this function, don't modify fn signatures + panic!("I return nothing!") +} +``` + +```rust +fn main() { + never_return(); +} + +use std::thread; +use std::time; +fn never_return() -> ! { + // implement this function, don't modify fn signatures + loop { + println!("I return nothing"); + // sleeping for 1 second to avoid exhausting the cpu resoucre + thread::sleep(time::Duration::from_secs(1)) + } +} +``` \ No newline at end of file diff --git a/solutions/basic-types/statements.md b/solutions/basic-types/statements.md index e69de29..dfc210a 100644 --- a/solutions/basic-types/statements.md +++ b/solutions/basic-types/statements.md @@ -0,0 +1,47 @@ +1. +```rust +fn main() { + let v = { + let mut x = 1; + x += 2 + }; + + assert_eq!(v, ()); + } +``` + +```rust +fn main() { + let v = { + let mut x = 1; + x += 2; + x + }; + + assert_eq!(v, 3); +} +``` + +2. +```rust +fn main() { + let v = { + let x = 3; + x + }; + + assert!(v == 3); +} +``` + +3. +```rust +fn main() { + let s = sum(1 , 2); + assert_eq!(s, 3); +} + +fn sum(x: i32, y: i32) -> i32 { + x + y +} +``` \ No newline at end of file diff --git a/src/basic-types/char-bool-unit.md b/src/basic-types/char-bool-unit.md index 9bf7f75..98f104c 100644 --- a/src/basic-types/char-bool-unit.md +++ b/src/basic-types/char-bool-unit.md @@ -1,7 +1,7 @@ # Char, Bool and Unit ### Char -๐ŸŒŸ +1. ๐ŸŒŸ ```rust, editable // make it work @@ -15,7 +15,7 @@ fn main() { } ``` -๐ŸŒŸ +2. ๐ŸŒŸ ```rust, editable // make it work @@ -30,7 +30,7 @@ fn print_char(c : char) { ``` ### Bool -๐ŸŒŸ +3. ๐ŸŒŸ ```rust, editable // make the println! work @@ -44,7 +44,7 @@ fn main() { } ``` -๐ŸŒŸ +4. ๐ŸŒŸ ```rust, editable // make it work @@ -57,7 +57,7 @@ fn main() { ### Unit type -๐ŸŒŸ๐ŸŒŸ +5. ๐ŸŒŸ๐ŸŒŸ ```rust,editable // make it work, don't modify `implicitly_ret_unit` ! @@ -78,7 +78,7 @@ fn explicitly_ret_unit() -> () { } ``` -๐ŸŒŸ๐ŸŒŸ what's the size of the unit type? +6. ๐ŸŒŸ๐ŸŒŸ what's the size of the unit type? ```rust,editable // modify `4` in assert to make it work diff --git a/src/basic-types/functions.md b/src/basic-types/functions.md index 67ddb47..bab0197 100644 --- a/src/basic-types/functions.md +++ b/src/basic-types/functions.md @@ -1,11 +1,11 @@ # Functions -๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ +1. ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ ```rust,editable fn main() { // don't modify the following two lines! let (x, y) = (1, 2); - let s = sum(1, 2); + let s = sum(x, y); assert_eq!(s, 3); } @@ -16,7 +16,7 @@ fn sum(x, y: i32) { ``` -๐ŸŒŸ๐ŸŒŸ +2. ๐ŸŒŸ ```rust,editable fn main() { print(); @@ -29,15 +29,16 @@ fn print() -> i32 { ``` -๐ŸŒŸ๐ŸŒŸ +3. ๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ ```rust,editable +// solve it in two ways fn main() { never_return(); } fn never_return() -> ! { - // implement this function, don't modify fn signatures + // implement this function, don't modify the fn signatures } ``` diff --git a/src/basic-types/statements-expressions.md b/src/basic-types/statements-expressions.md index bbaf2e3..c144912 100644 --- a/src/basic-types/statements-expressions.md +++ b/src/basic-types/statements-expressions.md @@ -25,9 +25,9 @@ fn main() { ``` ### Exercises -๐ŸŒŸ๐ŸŒŸ +1. ๐ŸŒŸ๐ŸŒŸ ```rust,editable -// make it work with two ways: both modify the inner {} +// make it work with two ways fn main() { let v = { let mut x = 1; @@ -38,7 +38,7 @@ fn main() { } ``` -๐ŸŒŸ +2. ๐ŸŒŸ ```rust,editable fn main() { @@ -48,10 +48,13 @@ fn main() { } ``` -๐ŸŒŸ +3. ๐ŸŒŸ ```rust,editable -fn main() {} +fn main() { + let s = sum(1 , 2); + assert_eq!(s, 3); +} fn sum(x: i32, y: i32) -> i32 { x + y; diff --git a/zh-CN/src/basic-types/char-bool-unit.md b/zh-CN/src/basic-types/char-bool-unit.md index b464c52..9437bda 100644 --- a/zh-CN/src/basic-types/char-bool-unit.md +++ b/zh-CN/src/basic-types/char-bool-unit.md @@ -1,7 +1,7 @@ # ๅญ—็ฌฆใ€ๅธƒๅฐ”ใ€ๅ•ๅ…ƒ็ฑปๅž‹ ### ๅญ—็ฌฆ -๐ŸŒŸ +1. ๐ŸŒŸ ```rust, editable use std::mem::size_of_val; @@ -14,7 +14,7 @@ fn main() { } ``` -๐ŸŒŸ +2. ๐ŸŒŸ ```rust, editable fn main() { @@ -28,7 +28,7 @@ fn print_char(c : char) { ``` ### ๅธƒๅฐ” -๐ŸŒŸ +3. ๐ŸŒŸ ```rust, editable // ่ฎฉ println! ๅทฅไฝœ @@ -42,7 +42,7 @@ fn main() { } ``` -๐ŸŒŸ +4. ๐ŸŒŸ ```rust, editable fn main() { @@ -54,7 +54,7 @@ fn main() { ### ๅ•ๅ…ƒ็ฑปๅž‹ -๐ŸŒŸ๐ŸŒŸ +5. ๐ŸŒŸ๐ŸŒŸ ```rust,editable // ่ฎฉไปฃ็ ๅทฅไฝœ๏ผŒไฝ†ไธ่ฆไฟฎๆ”น `implicitly_ret_unit` ! @@ -75,7 +75,7 @@ fn explicitly_ret_unit() -> () { } ``` -๐ŸŒŸ๐ŸŒŸ ๅ•ๅ…ƒ็ฑปๅž‹ๅ ็”จ็š„ๅ†…ๅญ˜ๅคงๅฐๆ˜ฏๅคšๅฐ‘๏ผŸ +6. ๐ŸŒŸ๐ŸŒŸ ๅ•ๅ…ƒ็ฑปๅž‹ๅ ็”จ็š„ๅ†…ๅญ˜ๅคงๅฐๆ˜ฏๅคšๅฐ‘๏ผŸ ```rust,editable // ่ฎฉไปฃ็ ๅทฅไฝœ๏ผšไฟฎๆ”น `assert!` ไธญ็š„ `4` diff --git a/zh-CN/src/basic-types/functions.md b/zh-CN/src/basic-types/functions.md index 1a07c9e..7015b8e 100644 --- a/zh-CN/src/basic-types/functions.md +++ b/zh-CN/src/basic-types/functions.md @@ -5,7 +5,7 @@ fn main() { // ไธ่ฆไฟฎๆ”นไธ‹้ขไธค่กŒไปฃ็ ! let (x, y) = (1, 2); - let s = sum(1, 2); + let s = sum(x, y); assert_eq!(s, 3); } @@ -29,9 +29,10 @@ fn print() -> i32 { ``` -๐ŸŒŸ๐ŸŒŸ +๐ŸŒŸ๐ŸŒŸ๐ŸŒŸ ```rust,editable +// ็”จไธค็งๆ–นๆณ•ๆฑ‚่งฃ fn main() { never_return(); } diff --git a/zh-CN/src/basic-types/statements-expressions.md b/zh-CN/src/basic-types/statements-expressions.md index 671f021..8a066fa 100644 --- a/zh-CN/src/basic-types/statements-expressions.md +++ b/zh-CN/src/basic-types/statements-expressions.md @@ -27,7 +27,7 @@ fn main() { ### ็ปƒไน  ๐ŸŒŸ๐ŸŒŸ ```rust,editable -// ไฝฟ็”จไธค็งๆ–นๆณ•ไฟฎๆ”นๅ†…้ƒจ็š„ {} ไธญ็š„ๅ†…ๅฎน +// ไฝฟ็”จไธค็งๆ–นๆณ•่ฎฉไปฃ็ ๅทฅไฝœ่ตทๆฅ fn main() { let v = { let mut x = 1; @@ -51,7 +51,10 @@ fn main() { ๐ŸŒŸ ```rust,editable -fn main() {} +fn main() { + let s = sum(1 , 2); + assert_eq!(s, 3); +} fn sum(x: i32, y: i32) -> i32 { x + y;