< 返回版块

SunApriloy 发表于 2021-01-30 22:53

Tags:pattern

在模式匹配语法中,为什么能直接使用..=,而不能使用..?在struct里面结构测试范围时也不能直接使用|呢?看了错误提示中的issue,也没看出个所以然来。特来请教大家。


#![allow(unused_variables)]
fn main() {
enum Message {
    Hello { id: i32 },
}

let msg = Message::Hello { id: 11 };

match msg {
    Message::Hello { id: id_variable @ 3..=7 } => {
        println!("Found an id in range: {}", id_variable)
    },
    Message::Hello { id: 10..12 } => { // error: exclusive range pattern syntax is experimental
        println!("Found an id in another range")
    },
    Message::Hello { id: 13|14|15 } => { // error: or-patterns syntax is experimental
        println!("Found an id in another range")
    },
    Message::Hello {id} => {
        println!("Found some other id")
    },
}
}

评论区

写评论
Borber 2022-12-09 23:21

希望没有太晚, 我刚刚也是看到了模式匹配这块, 然后找到了资料

https://github.com/rust-lang/rust/issues/37854

#![feature(exclusive_range_pattern)]

fn main() {
    let x = 3;

    match x {
        0..10 => println!("一位"),
        _ => println!("更多"),
    }
}

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=98b8dc23bb005009cf7d894af06f2e55

以及正好一小时之前还有一个相关的issus https://github.com/intellij-rust/intellij-rust/issues/9873

snylonue 2021-02-04 09:37

@ 是绑定变量

--
👇
hzqd: 我主要没太搞懂:为什么要用 @ 符号,而不用 in 关键字? 这看起来和 for 循环的“区间”语法产生了不一致。

Mike Tang 2021-02-04 06:18

for in 是配套的。

hzqd 2021-02-03 23:05

for 才是用于遍历的关键字吧!in 本身是指在没在区间内。

--
👇
Mike Tang: in 并不是区间意义,in 是用于遍历的语法糖

Mike Tang 2021-02-03 23:02

in 并不是区间意义,in 是用于遍历的语法糖

hzqd 2021-02-03 22:56

我主要没太搞懂:为什么要用 @ 符号,而不用 in 关键字? 这看起来和 for 循环的“区间”语法产生了不一致。

Mike Tang 2021-01-31 09:05

魔法就在@符号那里。

xin-water 2021-01-30 23:15

你这个就直接用switch好了。 模式匹配是匹配不同形态,你这都是Hello,匹配个啥啊?

1 共 8 条评论, 1 页