Rust的模式和匹配

一、模式和匹配

模式和匹配可以理解成一个模型一个路径结果,举一个不太恰当的例子,你的电脑上有很多种U盘的接口,你拿着一种线缆去插,插进去哪个,就用哪个,那个U口就是一个模型,那个线缆就是一个结果。或者有如小时候儿玩儿的泥板模范,把泥装上去,用力一按,就出来一个图形的泥块,在rust中也是如此。

二、rust中的模式和匹配

模式是 Rust语言中的一种特殊的语法,主要用来和相关类型中的结构,它和 match 表达式以及其他结构可以提供更多对程序控制流程的控制权。模式主要由以下组成:字面值、解构的数组、枚举、结构体或者元组、变量、通配符、占位符。除此以外,它可以有以下几种用法:
1、多个模式匹配:通过 | 语法匹配多个模式,这个语法是 或(or)的意思。
2、范围匹配:…= 语法可以匹配一个闭区间范围内的值。
3、忽略匹配:通过过下划线(_)作为匹配可以忽略匹配。也可以在变量前加 _ 来忽略,只使用 _ 和使用以下划线开头的名称的不同之处在于 _x 仍会将值绑定到变量,而 _ 则不绑定。… 模式会忽略模式中剩余的任何没有显式匹配的值部分。
4、匹配守卫:匹配守卫(match guard)即 match 分支模式之后的有一个 if 条件,它也必须被满足才能选择此分支。
5、at(@)绑定:即创建一个存放值的变量的同时测试其值是否匹配模式。
模式有两种形式:refutable(可反驳的)和 irrefutable(不可反驳的)。对于匹配任何传递的可能值的模式被称为是 不可反驳的(irrefutable);对某些可能的值进行匹配会失败的模式被称为是可反驳的(refutable)

三、应用

说多少不如看看例子就明白了:

//多重
let x = 1;
match x {
    1 | 2 => println!("一或二"),
    _ => println!("其他"),
}
//@
let x = 1u32;
match x {
    e @ 1 ... 5 | e @ 10 ... 15 => println!("get:{}", e),
    _ => (),
}
//匹配守卫
let x = 4;
let y = false;
match x {
    4 | 5 if y => println!("yes"),
    _ => println!("no"),
}
//范围
let x = 1;
match x {
    1 ... 10 => println!("一到十"),
    _ => println!("其它"),
}
let c = 'w';
match c {
    'a' ... 'z' => println!("小写字母"),
    'A' ... 'Z' => println!("大写字母"),
    _ => println!("其他字符"),
}
//省略
struct Point {
    x: i64,
    y: i64,
}
let point = Point { x: 0, y: 0 };
match point {
    Point { y, .. } => println!("y is {}", y),
}

在rust中,应用到模式匹配的主要场景有如下几点:
1、match分支
2、if let表达式
3、while let条件循环和for循环
4、let语句
5、函数参数
这个模式和匹配没有啥难度,只要认真看看文档就好了。

四、总结

其实看上面的分析就知道,Rust其实相对于c++来说,把一些细节组织越来,形成一个更完善,更有体系的用法。这样以来,Rust的知识体系就更容易管理和升级,而不是像c++一样在初学者眼里就是一片沙漠,到处都是知识点,根本学不完的感觉。这也是Rust的一个亮点。后来者总比先发者有优势,一定要利用好这一点,否则后发的优势也就没有了,还何谈进步?
努力吧,归来的少年!
Rust的模式和匹配_第1张图片

你可能感兴趣的:(rust,开发语言,rust)