Rust 中的条件判断和其它语言中的类似,它们也遵循类 C 语言风格的 if else结构:

    1. fn main() {
    2. let rust_is_awesome = true;
    3. if rust_is_awesome {
    4. println!("Indeed");
    5. }else {
    6. println!("Well, you should try Rust !");
    7. }
    8. }

    在 Rust 中。if 构造不是语句,而是一个表达式。在一般的编程语句中,语句不返回任何值,但表达式会返回值。这种区别意味着 Rust 中的 if else 条件总是会返回一个值。该值可以是 empty 类型的(),也可以是实际的值。无论花括号中的最后一行是什么,都会成为 if else 表达式的返回值。重点是要注意 ifelse 分支应该具有相同的返回类型。如前所示,我们不需要在 if 条件表达式的两边添加括号,我们升值可以将 if else 代码块的值分配给变量:

    1. fn main() {
    2. let result = if 1 == 2 {
    3. "Wait, what ?"
    4. }else {
    5. "Rust makes sense"
    6. };
    7. }

    当将要分配的值从if else表达式返回时,我们需要用分号作为结束标志。

    例如,if是一个表达式,那么let是一个声明,期望我们在结尾处有分号。在赋值的情况下,如果需要从前面的代码中删除 else代码块,编译器会抛出一个错误提示信息。

    条件和判断 - 图1

    如果没有else代码块,当if条件的判断结果为false时,那么结果将是(),变量 result 的值将可能是两个,即()&strRust 不允许将多种类型的数据储存在一个变量中。因此,在这种情况下,我们需要ifelse代码块返回相同的类型。此外,在条件分支中添加分号会更改代码的含义。通过在一些代码中的if代码块中的字符串之后添加分号,编译器会认为用户希望抛弃该值:

    1. fn main() {
    2. let result = if 1 == 2 {
    3. "Nothing makes sense";
    4. }else {
    5. "Sanity reigns";
    6. };
    7. println!("Result of computation:{:?}",result);
    8. }

    这种情况下。结果将是一个 empty 类型的(),这就是我们必须更改 println!({:?})表达式的原因。此类型无法以常规方式输出。对于更负责的多值条件判断,Rust 提供了被称为 match 表达式的强大构造来处理。