控制流
If
If是分支 (branch) 的一种特殊形式,也可以使用else和else if。 与C语言不同的是,逻辑条件不需要用小括号括起来,但是条件后面必须跟一个代码块。 Rust中的if是一个表达式 (expression),可以赋给一个变量:
let x = 5;
let y = if x == 5 { 10 } else { 15 };Rust是基于表达式的编程语言,有且仅有两种语句 (statement):
声明语句 (declaration statement),比如进行变量绑定的
let语句。表达式语句 (expression statement),它通过在末尾加上分号
;来将表达式变成语句,丢弃该表达式的值,一律返回unit
()。
表达式如果返回,总是返回一个值,但是语句不返回值或者返回(),所以以下代码会报错:
let y = (let x = 5);
let z: i32 = if x == 5 { 10; } else { 15; };值得注意的是,在Rust中赋值 (如x = 5) 也是一个表达式,返回unit的值()。
For
Rust中的for循环与C语言的风格非常不同,抽象结构如下:
其中expression是一个迭代器 (iterator),具体的例子为0..10 (不包含最后一个值), 或者[0, 1, 2].iter()。
While
Rust中的while循环与C语言中的类似。对于无限循环,Rust有一个专用的关键字loop。 如果需要提前退出循环,可以使用关键字break或者continue, 还允许在循环的开头设定标签 (同样适用于for循环):
Match
Rust中的match表达式非常强大,首先看一个例子:
其中|用于匹配多个值,...匹配一个范围 (包含最后一个值),并且_在这里是必须的, 因为match强制进行穷尽性检查 (exhaustiveness checking),必须覆盖所有的可能值。 如果需要得到|或者...匹配到的值,可以使用@绑定变量:
使用ref关键字来得到一个引用:
再看一个使用match表达式来解构元组的例子:
match的这种解构同样适用于结构体或者枚举。如果有必要, 还可以使用..来忽略域或者数据:
此外,Rust还引入了if let和while let进行模式匹配:
Last updated
Was this helpful?