|
|
|
@ -12,8 +12,10 @@ fn add_with_extra(x: i32, y: i32) -> i32 {
|
|
|
|
|
|
|
|
|
|
语句会执行一些操作但是不会返回一个值,而表达式会在求值后返回一个值,因此在上述函数体的三行代码中,前两行是语句,最后一行是表达式。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对于 Rust 语言而言,**这种基于语句(statement)和表达式(expression)的方式是非常重要的,你需要能明确的区分这两个概念**, 但是对于很多其它语言而言,这两个往往无需区分。基于表达式是函数式语言的重要特征,**表达式总要返回值**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其实,在此之前,我们已经多次使用过语句和表达式。
|
|
|
|
|
|
|
|
|
|
## 语句
|
|
|
|
@ -97,9 +99,14 @@ fn main() {
|
|
|
|
|
fn ret_unit_type() {
|
|
|
|
|
let x = 1;
|
|
|
|
|
// if 语句块也是一个表达式,因此可以用于赋值,也可以直接返回
|
|
|
|
|
if (x > 1) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// 类似三元运算符,在Rust里我们可以这样写
|
|
|
|
|
let y = if x % 2 == 1 {
|
|
|
|
|
"odd"
|
|
|
|
|
} else {
|
|
|
|
|
"even"
|
|
|
|
|
};
|
|
|
|
|
// 或者写成一行
|
|
|
|
|
let z = if x % 2 == 1 { "odd" } else { "even" };
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|