笔记-Rust流程控制表达式

208 阅读1分钟

流程控制

一般语言的常见的流程控制结构类型有:顺序结构、条件结构、循环结构,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);
    }
}