流程控制
一般语言的常见的流程控制结构类型有:顺序结构、条件结构、循环结构,rust 还有强大的 匹配结构。
条件表达式
条件表达式可以用于基本的条件语句,也可结合 let,使用 let xx = if cnd 作为 三元运算符,实现 cnd ? value1 : value2; 的功能
fn main() {
let a = 12;
let b = if a >= 0 && a <= 10 {
a * 2
} else {
a / 2
};
println!("b = {}", b);
}
循环表达式
三种循环表达式:for...in , while , loop 。
for i in 1..=3 {
println!("i = {}", i);
}
let mut i = 1;
while i <= 3 {
println!("i = {}", i);
i += 1;
}
let mut i = 1;
loop {
if i > 3 { // 符合条件则退出
break;
}
println!("i = {}", i);
i += 1;
}
match 表达式
fn main() {
let number = 10;
match number {
0 => println!("This is zero"),
1..=3 => println!("From 1 to 3"),
5 | 7 | 13 => println!("Good luck,"),
n @ 42..=50 => println!("Answer is {}", n),
_ => println!("Not matched!"),
}
}
match 模式匹配,还可以解构:元组,枚举,指针和引用,结构体。
if let 和 while let 表达式
// if let 相关样例
fn main() {
// 不使用 if let 的情形
let number = Some(7);
match number {
Some(i) => println!("option number is: {}", i),
_ => {}
}
// 使用 if let 的情形
let number = Some(10);
if let Some(i) = number {
println!("option number is: {}", i);
}
// if let 像普通的 if 一样,可以随意接续 else 或 else if
let number: Option<i32> = None; // 必须指定类型,否则无法匹配 Some(i),因为 i 需要类型
if let Some(i) = number {
println!("option number is: {}", i);
} else if 3 > 5 {
println!("3 is bigger than 5");
} else {
println!("donot deal this");
}
}
// while let 相关样例
fn main() {
// 不使用 while let
let mut v = vec![1, 2, 3, 4, 5];
loop {
match v.pop() {
Some(i) => println!("style1: i = {}", i),
None => break,
}
}
// 使用 while let
v = vec![1, 2, 3, 4, 5];
while let Some(i) = v.pop() {
println!("style2: i = {}", i);
}
}