首页 > 其他分享 >Rust的语句和表达式

Rust的语句和表达式

时间:2023-09-23 18:44:06浏览次数:33  
标签:语句 函数 let Rust 返回值 表达式

在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中语句不能返回值并以分号结尾,表达式总是返回值并且不能加分号,表达式可以作为函数的返回值,而语句不能。
溜了溜了。。

标签:语句,函数,let,Rust,返回值,表达式
From: https://www.cnblogs.com/ransang/p/17724886.html

相关文章

  • 神通数据库建表语句
    CREATETABLETABLE_NAME(IDintegerNOTNULLAUTO_INCREMENT,UUIDcharactervarying(64)NOTNULL,"NAME"charactervarying(64)NOTNULL,SORTintegerDEFAULT100NOTNULL,CONSTRAINTTABLE_NAME_PKEYPRIMARYKEY(ID))TABLESPAC......
  • Windows 安装 Rust
    1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/install1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/installwindows安装Rust安装太慢解决办法1、打开powershell2、分别执行下面两行代码:$ENV:RUSTUP_DIST_SERVER='https://mirrors.......
  • python基础(格式化字符,if分支语句)
    python格式化格式符号%%输出%%s字符串%d有符号十进制整数%f浮点型%c字符%u无符号十进制整数进制转换bin()2进制oct()8进制int()十进制//int(‘0o111’,8)hex()16进制2进制0b8进制0o16进制0xabs绝对值判断语句if....else猜数字小游戏......
  • 考试程序语句总结
    1、导csv文件到hive数据库建表便于接收数据:createtabletest1(day_idvarchar(30),sale_nbrvarchar(30),buy_nbrvarchar(30),cntvarchar(30),roundvarchar(30))rowformatserde'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITHSERDEPROPERTIES("separatorChar......
  • IF语句的三种用法
    第一种:IF语句IF(expr1,expr2,expr3); expr1、expr2、expr3分别代表条件1、条件2、条件3如果expr1为TRUE,则IF()返回值为expr2,否则返回值为expr3例子:updatesalarysetsex=if(sex='男','女','男')将salary表中的性别进行转换,男变女,女变男第二种:IFNULL(expr1,expr2)假......
  • 实验1:SDN拓扑实践进阶部分(使用python循环语句)
    #!/usr/bin/envpythonfrommininet.topoimportTopoclassMyTopo(Topo): def__init__(self): Topo.__init__(self) #host foriinrange(1,9): self.addHost("h"+str(i)) #switch foriinrange(1,11): self.addSwitch("s&quo......
  • [leetcode] 10. 正则表达式匹配
    10.正则表达式匹配给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.'匹配任意单个字符'*'匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例1:输入:s="aa",p="a"输出:false解释:"a"无......
  • MySQL高级SQL语句之多表连接
    目录MySQL高级SQL语句1.实际操作1.1新建表1.2查看表及内容1.3通配符1.4函数1.4.1数学函数:1.4.2聚合函数:1.4.3字符串函数:1.5语句1.5.1GROUPBYsql语句的执行顺序1.5.2HAVING1.5.3别名1.6查询1.6.1子查询1.6.2EXISTS1.7表连接1.7.1innerjoin内连接1.7.2leftjoi......
  • 常用正则表达式
    一、校验数字的表达式数字:[1]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$正数、负数、和小数:^(-|+)?\d......
  • A closer look at Ownership in Rust
    SoyouwanttolearnRustandkeephearingabouttheconceptofOwnershipandBorrowing,butcan’tfullywrapyourheadaroundwhatitis.Ownershipissoessentialthatit’sgoodtounderstanditearlyoninyourjourneyoflearningRust,alsotoavoidr......