在模式匹配语法中,为什么能直接使用..=
,而不能使用..
?在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")
},
}
}
1
共 8 条评论, 1 页
评论区
写评论希望没有太晚, 我刚刚也是看到了模式匹配这块, 然后找到了资料
https://github.com/rust-lang/rust/issues/37854
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=98b8dc23bb005009cf7d894af06f2e55
以及正好一小时之前还有一个相关的issus https://github.com/intellij-rust/intellij-rust/issues/9873
@
是绑定变量--
👇
hzqd: 我主要没太搞懂:为什么要用
@
符号,而不用in
关键字? 这看起来和 for 循环的“区间”语法产生了不一致。for in 是配套的。
for 才是用于遍历的关键字吧!in 本身是指在没在区间内。
--
👇
Mike Tang: in 并不是区间意义,in 是用于遍历的语法糖
in 并不是区间意义,in 是用于遍历的语法糖
我主要没太搞懂:为什么要用
@
符号,而不用in
关键字? 这看起来和 for 循环的“区间”语法产生了不一致。魔法就在@符号那里。
你这个就直接用switch好了。 模式匹配是匹配不同形态,你这都是Hello,匹配个啥啊?