zhengrenzhe's blog   About

Rust 中的表达式与语句

Rust是一门基与表达式(expression-based)的语言,所以表达式在Rust中会有一些区别于别的语言的特殊作用。在绝大部分编程语言中,都有表达式与语句的概念。 通常,表达式可以被求值,也就是说它返回某一类型的值,并且可以放在任何一个需要值的地方;而语句在大部分情况下都无法被求值。

以JavaScript为例

// 表达式
3;
1 + 2;
func();
true ? 1 : 2;
new String();
1 === 2;

// 语句
let a = 1;
if (true) {

}

在Rust中,表达式的范围可不止这些,例如宏调用,创建新作用域的{}, if也是表达式:

let a = println!("{}", 2);
let b = {
    2
};
let c = if true { 1 } else { 2 };

在Rust中,表达式特殊的一点是它在{}或函数内时,最后一个表达式可作为{}或函数的值,例如:

let s = {
    let t = 6;
    t + 2
};
println!("{}", s); // 8

fn add(a: i32, b: i32) -> i32 {
    a + b
}
println!("{}", add(1, 2)); // 3

let t = if true { 1 } else { 0 };
println!("{}", t); // 1

这样我们就能以更简单的结构来写代码了。

要注意的是,表达式并不包含分号,表达式带上了分号,就变成了语句。 例如上面的a + b如果带上了分号就成了表达式, 那它就不能作为函数的返回值,在没有显式return的情况下,函数的返回值将是()

fn add(a: i32, b: i32) -> i32 {
    a + b
}

// fn (a: i32, b: i32) -> ()

← 多行文本截断的新思路:shear.js  Rust 所有权机制 →