【发布时间】:2019-08-01 22:26:35
【问题描述】:
你不能这样做:
if option.is_some() && option == 1 {
// ...
}
因为如果option.is_some() == false 第二次比较会出错。
做这样的事情最好的方法是什么?
我现在在做什么:
if option.is_some() {
if option == 1 {
// ...
}
}
【问题讨论】:
你不能这样做:
if option.is_some() && option == 1 {
// ...
}
因为如果option.is_some() == false 第二次比较会出错。
做这样的事情最好的方法是什么?
我现在在做什么:
if option.is_some() {
if option == 1 {
// ...
}
}
【问题讨论】:
模式匹配是一个强大的工具,使用它!代替常规的if,使用if let:
if let Some(1) = option {
// --snip--
}
有关模式匹配的更多信息,请咨询The Rust Reference。
【讨论】:
match 关键字,例如 pastebin.com/dk1n48Lb 。我想这做同样的事情但更优雅? if let 也可以用于> 比较吗?
if let,什么时候使用它而不是 match 或者什么时候更喜欢后者而不是前者,an entire dedicated chapter
if let 是否可以与> 或类似条件一起使用。
Some(0..=3) 甚至Some(12..=<T as MaxValue>::MAX) 之类的模式(或者根据类型和您的比较< 或> 使用MIN) .您还可以使用match 和额外的if 过滤器作为其模式的一部分,甚至可以使用if option.map_or(false, |i| i > 2)。查看我在答案中链接的参考资料。
模式匹配是正确的解决方案,但如果你想要一个bool,你可以使用相等运算符:
fn main() {
let maybe_int = Some(123);
let contains_123: bool = maybe_int == Some(123);
assert!(contains_123);
}
【讨论】: