Rust中语句和表达式的区别

语句(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;)则变成了表达式,将不会返回任何值。

posted @ 2022-01-22 18:17  鱼又悲  阅读(231)  评论(0编辑  收藏  举报