Rust中的控制流
控制流其实说的就是 分支和 循环。
分支
if系列表达式
和C的使用一样,区别就是可以去掉括号,当然留着括号也可以运行通过,但是会有警告,所以为了程序没有警告还是把括号去掉吧,还有一点就是在Rust中的if判断条件中的结果必须是true或false,这一点和C语言不一样,因为在C中非0为真,0为假。例如:
#include <stdio.h>
int main() {
if (6) {
printf("OK!\n"); //C语言执行这句话,因为6非0所以为真
}
else {
printf("No!\n");
}
}
fn main() {
if 6 {
//Rust语言在这里就报错了,这里跟括号没关系,是编译器识别6是i32类型,但实际应需要bool类型
printf("OK!\n");
}
else {
printf("No!\n");
}
}
其他就没什么区别了,包括else if的连用和else都和C语言的一样,那就没什么好说的了。
三目运算符
在Rust中没有像C语言一样的三目运算符了,但是可以通过if系列运算符来实现三目运算符的效果。
let number = if condition {
5 } else {
"six" };
看代码应该是能理解的,如果不能理解,那兄弟你重修一下C语言吧。
match
Rust版的switch(C语言的分支关键字之一).只能说功能相似,使用起来还是有区别的,要不然为什么要改个名字。
Rust 有一个叫做 match
的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。模式可由字面值、变量、通配符和许多其他内容构成;match
的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。
可以把 match
表达式想象成某种硬币分类器:硬币滑入有着不同大小孔洞的轨道,每一个硬币都会掉入符合它大小的孔洞。同样地,值也会通过 match
的每一个模式,并且在遇到第一个 “符合” 的模式时,值会进入相关联的代码块并在执行中被使用。
enum Coin {
//一个枚举类型
Penny,
Nickel,
Dime,
Quarter,
}
fn value_in_cents(coin: Coin) -> u8 {
match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
对应C语言的代码:
enum Coin {
//一个枚举类型
Penny,
Nickel,
Dime,
Quarter,
}
unsigned short value_in_cents(unsigned short coin) {
switch(coin) {
case Coin::Penny: return</