fn main() {
print_labeled_measurement(5, 'h');
}
fn print_labeled_measurement(value: i32, unit_label: char) {
println!("The measurement is: {value}{unit_label}");
}
函数定义时的参数叫做 形参(Parameters),函数调用时传入的实际参数叫做 实参(Arguments),日常交流中形参和实参不做太多区分,统一叫做 参数。函数参数是 函数签名 的重要组成部分。
不同于大多数语言基于 语句(Statements),Rust 的函数实现是基于 表达式(Expressions)的。
执行操作但不返回值的叫语句,执行计算并且返回值的叫表达式。
在 C/Ruby/Python 中赋值操作更像是表达式,它会返回所赋的值,所以允许连续赋值的写法:x = y = 1
;然而在 Rust 中赋值操作是语句,不允许连续赋值。
简单表达式很直观:
let x = 1;
let x = 1 + 2;
上述例子中,let x = 1;
整体以分号结尾,是一个语句,没有返回值。1
是一个表达式,不是以分号结尾,返回值是 1
。
let x = 1 + 2;
整体是一个语句,以分号结尾。1 + 2
是一个表达式,不以分号结尾,返回值是 3
。
{}
表达式稍微复杂一点:
let x = {
let a = 1;
a + 1
};
上述例子中,{ ... }
是一个表达式,它的结尾 a + 1
是一个表达式,它的返回值同时也是 { ... }
表达式的返回值,所以最终变量 x
获得的就是 2
。
let x = {
let a = 1;
a + 1;
};
上述例子中,{ ... }
是一个表达式,它的结尾 a+1;
是一个语句,故 { ... }
表达式没有显式的返回值,那么其返回的就是单元元组(()
),所以最终变量 x
获得的就是单元单组。
不管形式如何,Rust 中表达式结尾的返回值没有分号,否则它就是一个语句。
除此之外,函数调用也是一个表达式,因为它总有返回值。
等号右边总是一个表达式。
评论区