流程语句
if_else
let number = 6;
if number > 5 {
println!("number is greater than 5");
} else if number == 5 {
println!("number is less than or equal to 5");
} else {
println!("number is less than 5");
}
## 循环
```rust
let mut count = 0;
loop {
count += 1;
println!("count is {count}");
if count >= 5 {
break;
}
}
let mut count = 0;
while count < 5 {
count += 1;
println!("count is {count}");
}
for i in 0..5 { // 0..5表示一个范围,包含0但不包含5
println!("i is {i}");
}
for i in 0..=5 { // 0..=5表示一个范围,包含0和5
println!("i is {i}");
}
let a = [10, 20, 30, 40, 50];
for element in a.iter() { // 使用iter方法获取数组的迭代器
println!("element is {element}");
}// 如果不用iter方法,直接for element in a会得到数组的所有权,导致a无法再使用
// Return value from loop 返回的是break后面的值
let mut i: u32 = 0;
let v = loop {
i += 1;
if i > 3 {
break "i > 3";
}
};
println!("return value from loop {}", v);
match
let number = 2;
match number {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
_ => println!("other"), // _表示匹配所有其他情况
}
match x {
1 | 2 | 3 => println!("one, two or three"), // |表示匹配多个值
4..=10 => println!("four to ten"), // ..=表示匹配
_ => println!("other"),
}
// @ 绑定
match x {
i @ 1..=10 => println!("@ {i}"),
_ => println!("other"),
}
// Option
let x: Option<u32> = Some(3);
match x {
Some(x) => println!("{x}"),
None => println!("none"),
}
// Result
let res: Result<u32, String> = Ok(1);
match res {
Ok(i) => println!("ok {i}"),
// Ignore error message
Err(_) => println!("err"),
}
if let
只需要关注某种特定情况时,使用if let可以更简洁地处理匹配,而不需要编写完整的match语句。
何时使用if let:if let当您的主要目标是匹配枚举的某个特定变体(或单个模式),而您不关心处理其他变体/模式,或者您希望它们不产生任何操作时,请使用此功能。
减少样板代码match:与编写包含“兜底”(_)或空臂的完整语句来处理其他情况相比,它提供了一种更符合人体工程学的方法来处理单个重要的匹配臂。
let x: Option<u32> = Some(3);
if let Some(x) = x {
println!("x is {x}");
} else {
println!("x is none");
}