Rust的语句和表达式

Rust是一门基于表达式的语言,在其他编程语言中经常听到类似赋值语句、lambda表达式的说法,却从来没有在意过所谓的语句和表达式有什么区别,而在实际的使用中,它们好像确实没啥区别,但是在Rust中,语句和表达式就被严格区分开来了,《Rust 程序设计语言》中提到Rust 的函数体是由一系列语句和一个可选的结尾表达式来构成。在Rust的函数中一般会省略return关键字,默认返回最后一个表达式的值,除非需要提前返回。

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的后面没有分号,一旦加上了分号,它就成了一个表达式语句,这段代码块的返回值就被隐式的设置为单元类型()


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

函数的花括号中的代码也可以被理解成一个代码块,最后的表达式可以充当函数的返回值,如果没有返回值,则会隐性返回一个(),因为在rust中存在一种永远不返回值的函数,需要用!来作为返回类型。

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

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


__EOF__

本文作者Ransang
本文链接https://www.cnblogs.com/ransang/p/17724886.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Ransang  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示