Rust -- 模式与匹配

科技资讯 投稿 6800 0 评论

Rust -- 模式与匹配

1. 模式

    模式组成内容
  • 字面量
  • 解构的数组、枚举、结构体、元祖
  • 变量
  • 通配符
  • 占位符

流程:匹配值 --> 是否拥有正确的数据 --> 运行特定的代码

2. 使用模式的位置

    match分支:由match关键字、一个匹配的值和一个或多个分支构成
    • 穷尽性:所有可能的值都必须考虑到
    • _: 匹配所有情况,不绑定任何变量
enum Status {
    // 其中对应的值通过 Status::OK as i32方式取出
    OK = 200,
    NotFound = 404,
    Create = 201
}

fn main( {
    let status = Status::OK;

    match status {
        // 将枚举
        Status::OK => println!("{}", Status::OK as i32,
        _ => println!(
    }
}
    if let 语句

只关心一种情况的match分支的简写,可选的else在模式不匹配时执行,可以灵活搭配 else if 、else if let,搭配之间不需要关联性

    while let 条件循环

fn main( {
    let mut stack = Vec::new(;
    // 推入数据
    stack.push(1;
    stack.push(2;
    stack.push(3;
    stack.push(4;

    // 弹出数据
    while let Some(v = stack.pop( {
        println!("value: {}", v
    }
}
    for循环

模式是for关键字直接跟随的值

fn main( {
    let valuse = vec![1, 2, 3, 4, 5];
    
    // 遍历vector,使用了模式对元祖进行解构
    for (index, value in valuse.iter(.enumerate( {
        println!("index: {}, value: {}", index, value
    }
}
    let 语句

将模式与表达式进行比较,并为任何找到的名称赋值

fn main( {
    // 结构元祖
    let (x, y, z = (1, 2, 3;
    println!("{}, {}, {}", z, y, x;
    
    // 普通变量声明
    let x = 5;
}
    函数参数

与let语句一致

fn function_pattern(&(x, y: &(i32, i32 -> i32 {
    x + y
}

fn main( {
    let num = (1, 2;
    let sum = function_pattern(#
    println!("sum: {}", sum
}

3. 模式分类

依据:是否会匹配可能失败

    不可反驳: 能匹配任何传递的可能值
  • let语句 for循环 函数
  • 可反驳: 对某些可能存在的值进行匹配会失败
  • if let、 while let、match分支

4. 模式语法

    匹配字面量
fn main( {
    let name = "beimen";

    match name {
        "beimen" => println!("beimen",
        "chuixue" => println!("chuixue",
        _ => println!("unknown"
    }
}

编程笔记 » Rust -- 模式与匹配

赞同 (28) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽