K. *_*ann 5 constants pattern-matching rust
我试过天真的方法
fn main() -> Result<(), Box<std::error::Error>> {
let num = 0;
match num {
u64::max_value() => println!("Is u64::max_value()"),
_ => println!("Is boring")
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
但它失败了expected tuple struct/variant, found method <u64>::max_value。
除了n if n == u64::max_value() => ...我可以使用的语法之外,还有其他语法吗?
的左边部分=>必须是一个模式,很少有表达式也是有效的模式。调用表达式不是有效的模式。
可以匹配命名常量,因此您可以执行以下操作:
fn main() -> Result<(), Box<std::error::Error>> {
let num = 0;
const MAX: u64 = u64::max_value();
match num {
MAX => println!("Is u64::max_value()"),
_ => println!("Is boring")
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
这还有一个好处是让编译器检查你的匹配是否是详尽的(模式守卫没有):
const fn true_fn() -> bool { true }
fn main() -> Result<(), Box<std::error::Error>> {
let num = true;
const TRUE: bool = true_fn();
match num {
TRUE => println!("Is u64::max_value()"),
false => println!("Is boring")
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1529 次 |
| 最近记录: |