add solutions for basic-types, fix errors

This commit is contained in:
sunface
2022-03-02 16:27:16 +08:00
parent 6be05a6686
commit 59851ca1bb
9 changed files with 211 additions and 26 deletions

View File

@ -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);
}
```

View File

@ -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))
}
}
```

View File

@ -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
}
```