我在Rust中实现了一个解析器,而空白是我想在match模式中重用的常见模式.
此代码有效:
let ch = ' ';
match ch {
' ' | '\n' | '\t' | '\r' => println!("whitespace"),
_ => println!("token"),
}
Run Code Online (Sandbox Code Playgroud)
如果我每次都需要继续指定空白模式,这将变得非常重复.我想定义一次并重用它.我想做的事情如下:
let whitespace = ' ' | '\n' | '\t' | '\r';
let ch = ' ';
match ch {
whitespace => println!("whitespace"),
_ => println!("token"),
}
Run Code Online (Sandbox Code Playgroud)
编译器不喜欢ws赋值.它将其解释|为二进制运算而不是交替运算.
模式可以以某种方式存储在变量中吗?有没有更好或更惯用的方法来做到这一点?
Rust菜鸟在这里。我很困惑为什么当我在一个范围内迭代的变量与该范围的最大值匹配时会出现这种奇怪的行为。它不是只匹配最后一项,而是匹配所有内容!有人可以解释一下我从这段代码中得到的输出和编译器警告吗:
fn main() {
let maxi = 2;
for i in 0..=maxi {
match i {
maxi => {
println!("i={} matched maxi={}",i,maxi);
}
_ => {
println!("i={} matched with _",i);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器输出如下
warning: unreachable pattern
--> se_match_loop.rs:7:15
|
5 | maxi => {
| ---- matches any value
6 | println!("i={} matched maxi={}",i,maxi);
7 | } _ => {
| ^ unreachable pattern
|
= note: `#[warn(unreachable_patterns)]` on by default
warning: 1 warning emitted
Run Code Online (Sandbox Code Playgroud)
当我执行编译的脚本时,这是输出
i=0 matched …Run Code Online (Sandbox Code Playgroud) rust ×2