Rust从入门到实战系列二百七十七:match, matches! 和 if let

本文详细介绍了Rust语言中的match关键字,枚举类型(如Direction,Message,MyEnum等)以及matches!和iflet的用法,展示了如何通过这些工具进行智能匹配和条件判断。
摘要由CSDN通过智能技术生成

match

  1. 🌟🌟
    // 填 空
    enum Direction {
    East,
    West,
    North,
    South,
    }
    fn main() {
    let dire = Direction::South;
    match dire {
    Direction::East => println!(“East”),
    __ => { // 在 这 里 匹 配 South 或 North
    println!(“South or North”);
    },
    _ => println!(__),
    };
    }
  2. 🌟🌟 match 是一个表达式,因此可以用在赋值语句中
    fn main() {
    let boolean = true;
    // 使 用 match 表 达 式 填 空 , 并 满 足 以 下 条 件
    //
    // boolean = true => binary = 1
    // boolean = false => binary = 0
    let binary = __;
    assert_eq!(binary, 1);
    }
  3. 🌟🌟 使用 match 匹配出枚举成员持有的值
    // 填 空
    enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
    }
    fn main() {
    let msgs = [
    Message::Quit,
    Message::Move{x:1, y:3},
    Message::ChangeColor(255,255,0)
    ];
    for msg in msgs {
    show_message(msg)
    }
    }
    fn show_message(msg: Message) {
    match msg {
    __ => { // 这 里 匹 配 Message::Move
    assert_eq!(a, 1);
    assert_eq!(b, 3);
    },
    Message::ChangeColor(_, g, b) => {
    assert_eq!(g, __);
    assert_eq!(b, __);
    }
    __ => println!(“no data in these variants”)
    }
    }
    matches!
    matches! 看起来像 match , 但是它可以做一些特别的事情
  4. 🌟🌟
    fn main() {
    let alphabets = [‘a’, ‘E’, ‘Z’, ‘0’, ‘x’, ‘9’ , ‘Y’];
    // 使 用 matches 填 空
    for ab in alphabets {
    assert!(__)
    }
    }
  5. 🌟🌟
    enum MyEnum {
    Foo,
    Bar
    }
    fn main() {
    let mut count = 0;
    let v = vec![MyEnum::Foo,MyEnum::Bar,MyEnum::Foo];
    for e in v {
    if e == MyEnum::Foo { // 修 复 错 误 , 只 能 修 改 本 行 代 码
    count += 1;
    }
    }
    assert_eq!(count, 2);
    }
    if let
    在有些时候, 使用 match 匹配枚举有些太重了,此时 if let 就非常适合.
  6. 🌟
    fn main() {
    let o = Some(7);
    // 移 除 整 个 match 语 句 块 , 使 用 if let 替 代
    match o {
    Some(i) => {
    println!(“This is a really long string and {:?}”, i);
    }
    _ => {}
    };
    }
  7. 🌟🌟
    // 填 空
    enum Foo {
    Bar(u8)
    }
    fn main() {
    let a = Foo::Bar(1);
    __ {
    println!(“foobar 持 有 的 值 是: {}”, i);
    }
    }
  8. 🌟🌟
    enum Foo {
    Bar,
    Baz,
    Qux(u32)
    }
    fn main() {
    let a = Foo::Qux(10);
    // 移 除 以 下 代 码 , 使 用 match 代 替
    if let Foo::Bar = a {
    println!(“match foo::bar”)
    } else if let Foo::Baz = a {
    println!(“match foo::baz”)
    } else {
    println!(“match others”)
    }
    }
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值