语句(statement)指那些执行操作但不返回值得指令;表达式(expression)指会进行计算并产生一个值作为结果的指令。
因为语句不会返回值。所以,在Rust中,不能将一条let语句赋值给另一个变量,如下所示的代码会产生编译时错误:
fn main() {
let x = (let y = 6);
}
尝试运行上述程序会产生如下报错信息(Rust 1.58.0):
> cargo run
Compiling hello_world v0.1.0 (D:\projects\hello_world)
error: expected expression, found statement (`let`)
--> src\main.rs:2:14
|
2 | let x = (let y = 6);
| ^^^^^^^^^
|
= note: variable declaration using `let` is a statement
由于语句 let y = 6 没有返回任何值,所以变量 x 就没有可以绑定的东西。
与语句不同,表达式会计算出某个值来作为结果。
调用函数 是表达式,调用宏 是表达式,我们用来创建新作用域的 花括号({}
) 也是表达式。
例如:
fn main() {
let x = {
let y = 4;
y + 1
};
println!("x = {}", x); // 输出 x = 5
}
需要注意,y + 1
后面没有加分号(是表达式);若其后加了分号(即 y + 1;
)则变成了表达式,将不会返回任何值。