Rust 中的条件判断和其它语言中的类似,它们也遵循类 C 语言风格的 if else
结构:
fn main() {
let rust_is_awesome = true;
if rust_is_awesome {
println!("Indeed");
}else {
println!("Well, you should try Rust !");
}
}
在 Rust 中。if
构造不是语句,而是一个表达式。在一般的编程语句中,语句不返回任何值,但表达式会返回值。这种区别意味着 Rust
中的 if else
条件总是会返回一个值。该值可以是 empty
类型的(),也可以是实际的值。无论花括号中的最后一行是什么,都会成为 if else
表达式的返回值。重点是要注意 if
和 else
分支应该具有相同的返回类型。如前所示,我们不需要在 if 条件表达式的两边添加括号,我们升值可以将 if else
代码块的值分配给变量:
fn main() {
let result = if 1 == 2 {
"Wait, what ?"
}else {
"Rust makes sense"
};
}
当将要分配的值从if else
表达式返回时,我们需要用分号作为结束标志。
例如,if
是一个表达式,那么let
是一个声明,期望我们在结尾处有分号。在赋值的情况下,如果需要从前面的代码中删除 else
代码块,编译器会抛出一个错误提示信息。
如果没有else
代码块,当if
条件的判断结果为false
时,那么结果将是()
,变量 result
的值将可能是两个,即()
和&str
。Rust
不允许将多种类型的数据储存在一个变量中。因此,在这种情况下,我们需要if
和else
代码块返回相同的类型。此外,在条件分支中添加分号会更改代码的含义。通过在一些代码中的if
代码块中的字符串之后添加分号,编译器会认为用户希望抛弃该值:
fn main() {
let result = if 1 == 2 {
"Nothing makes sense";
}else {
"Sanity reigns";
};
println!("Result of computation:{:?}",result);
}
这种情况下。结果将是一个 empty
类型的()
,这就是我们必须更改 println!({:?})
表达式的原因。此类型无法以常规方式输出。对于更负责的多值条件判断,Rust
提供了被称为 match
表达式的强大构造来处理。