if
if
根据条件是否为真来决定是否执行某些代码,以及根据条件是否为真来重复运行一段代码是大部分编程语言的基本组成部分。
let x = 5;
let y = if x == 5 { 10 } else { 15 };
fn main() {
let my_number = 5;
if my_number == 7 {
println!("It's seven");
}
}
请注意,我们写的是 my_number == 7
而不是 if(my_number == 7)
,在
fn main() {
let my_number = 5;
if my_number == 7 {
println!("It's seven");
} else if my_number == 6 {
println!("It's six")
} else {
println!("It's a different number")
}
}
使用else if 处理多重条件
可以将
fn main() {
let number = 6;
if number % 4 == 0 {
println!("number is divisible by 4");
} else if number % 3 == 0 {
println!("number is divisible by 3");
} else if number % 2 == 0 {
println!("number is divisible by 2");
} else {
println!("number is not divisible by 4, 3, or 2");
}
}
$ cargo run
Compiling branches v0.1.0 (file:///projects/branches)
Finished dev [unoptimized + debuginfo] target(s) in 0.31 secs
Running `target/debug/branches`
number is divisible by 3
当执行这个程序时,它按顺序检查每个 if
表达式并执行第一个条件为真的代码块。注意即使number is divisible by 2
,更不会输出 else
块中的 number is not divisible by 4, 3, or 2
。原因是
您可以使用
在let 语句中使用if
此外,
fn main() {
let condition = true;
let number = if condition {
5
} else {
6
};
println!("The value of number is: {}", number);
}
fn main() {
let condition = true;
let number = if condition {
5
} else {
"six"
};
println!("The value of number is: {}", number);
}
error[E0308]: if and else have incompatible types
--> src/main.rs:4:18
|
4 | let number = if condition {
| __________________^
5 | | 5
6 | | } else {
7 | | "six"
8 | | };
| |_____^ expected integer, found &str
|
= note: expected type `{integer}`
found type `&str`
let number = Some(7);
let mut optional = Some(0);
// If `let` destructures `number` into `Some(i)`, evaluate the block.
if let Some(i) = number {
println!("Matched {:?}!", i);
} else {
println!("Didn't match a number!");
}
// While `let` destructures `optional` into `Some(i)`, evaluate the block.
while let Some(i) = optional {
if i > 9 {
println!("Greater than 9, quit!");
optional = None;
} else {
println!("`i` is `{:?}`. Try again.", i);
optional = Some(i + 1);
}
}
if let
是 match
的一个语法糖,它当值匹配某一模式时执行代码而忽略所有其他值。可以在 if let
中包含一个 else
。else
块中的代码与 match
表达式中的 _
分支块中的代码相同,这样的 match
表达式就等同于 if let
和 else
。回忆一下示例Coin
枚举的定义,其 Quarter
成员也包含一个 UsState
值。如果想要计数所有不是match
表达式:
let mut count = 0;
match coin {
Coin::Quarter(state) => println!("State quarter from {:?}!", state),
_ => count += 1,
}
或者可以使用这样的 if let
和 else
表达式:
let mut count = 0;
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}!", state);
} else {
count += 1;
}
如果你的程序遇到一个使用 match
表达起来过于啰嗦的逻辑,记住 if let
也在你的