Rust的语句和表达式

发布时间 2023-09-23 18:41:48作者: Ransang

在Java中经常听到类似赋值语句、lambda表达式的说法,却从来没有在意过所谓的语句和表达式有什么区别,而在实际的使用中,它们好像确实没啥区别,但是在Rust中,语句和表达式就被严格区分开来了,《Rust 程序设计语言》中提到Rust 的函数体是由一系列语句和一个可选的结尾表达式来构成,。

Rust中语句(Statments)是执行一些操作但不返回值的指令,比如一个创建变量并绑定值的语句:let x = 6;,而表达式(Expressions)则计算并返回一个值,比如5 + 6,它计算并返回一个值11。

表达式可以是语句的一部分,例如我们把上面的5 + 6绑定给一个变量x,let x = 5 + 6;。一个代码块也是一个表达式,像这样:

let y = 
{
  let x = 6;
  x + 1
}

花括号中的代码返回了x+1的值7,注意x+1的后面没有分号,一旦加上了分号,它就成了一个语句,这段代码块的返回值就被隐式的设置为(),没有错,在rust中()也是一个值。


在ide中的代码提示中可以很清晰的看到,没加分号前 y的类型是i32,加了分号后类型就成了()

函数中的结尾表达式也跟上面的代码块中的用法类似,可以充当函数的返回值,如果没有返回值,则会隐性返回一个(),因为在rust中存在一种永远不返回值的函数,需要用!来作为返回类型。

显式的将返回值写成(),也是没有问题的,所以函数的调用也是一个表达式,哪怕有些函数它看上去好像没有返回值。

总结一下:
在Rust中语句不能返回值并以分号结尾,表达式总是返回值并且不能加分号,表达式可以作为函数的返回值,而语句不能。
溜了溜了。。