2022-02-25 00:34:31 -06:00
|
|
|
# 语句与表达式
|
2022-02-25 00:24:23 -06:00
|
|
|
|
2022-02-25 00:34:31 -06:00
|
|
|
### 示例
|
2022-02-25 00:24:23 -06:00
|
|
|
```rust,editable
|
|
|
|
fn main() {
|
|
|
|
let x = 5u32;
|
|
|
|
|
|
|
|
let y = {
|
|
|
|
let x_squared = x * x;
|
|
|
|
let x_cube = x_squared * x;
|
|
|
|
|
2022-02-25 00:34:31 -06:00
|
|
|
// 下面表达式的值将被赋给 `y`
|
2022-02-25 00:24:23 -06:00
|
|
|
x_cube + x_squared + x
|
|
|
|
};
|
|
|
|
|
|
|
|
let z = {
|
2022-02-25 00:34:31 -06:00
|
|
|
// 分号让表达式变成了语句,因此返回的不再是表达式 `2 * x` 的值,而是语句的值 `()`
|
2022-02-25 00:24:23 -06:00
|
|
|
2 * x;
|
|
|
|
};
|
|
|
|
|
|
|
|
println!("x is {:?}", x);
|
|
|
|
println!("y is {:?}", y);
|
|
|
|
println!("z is {:?}", z);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-02-25 00:34:31 -06:00
|
|
|
### 练习
|
2022-03-02 08:11:56 -06:00
|
|
|
1. 🌟🌟
|
2022-02-25 00:24:23 -06:00
|
|
|
```rust,editable
|
2022-03-02 02:27:16 -06:00
|
|
|
// 使用两种方法让代码工作起来
|
2022-02-25 00:24:23 -06:00
|
|
|
fn main() {
|
|
|
|
let v = {
|
|
|
|
let mut x = 1;
|
|
|
|
x += 2
|
|
|
|
};
|
|
|
|
|
|
|
|
assert_eq!(v, 3);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-03-02 08:11:56 -06:00
|
|
|
2. 🌟
|
2022-02-25 00:24:23 -06:00
|
|
|
```rust,editable
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let v = (let x = 3);
|
|
|
|
|
|
|
|
assert!(v == 3);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2022-03-02 08:11:56 -06:00
|
|
|
3. 🌟
|
2022-02-25 00:24:23 -06:00
|
|
|
```rust,editable
|
|
|
|
|
2022-03-02 02:27:16 -06:00
|
|
|
fn main() {
|
|
|
|
let s = sum(1 , 2);
|
|
|
|
assert_eq!(s, 3);
|
|
|
|
}
|
2022-02-25 00:24:23 -06:00
|
|
|
|
|
|
|
fn sum(x: i32, y: i32) -> i32 {
|
|
|
|
x + y;
|
|
|
|
}
|
2022-03-01 08:06:38 -06:00
|
|
|
```
|
|
|
|
|
2022-05-01 07:02:12 -05:00
|
|
|
> 你可以在[这里](https://github.com/sunface/rust-by-practice/blob/master/solutions/basic-types/statements.md)找到答案(在 solutions 路径下)
|