mirror of
https://github.com/sunface/rust-by-practice.git
synced 2025-06-23 04:29:41 +00:00
add solutions for basic-types, fix errors
This commit is contained in:
@ -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);
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
||||
```
|
@ -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
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user