我有一个Vec
值,并且想要filter
那些与特定模式匹配的值。
仅检查表达式是否与模式匹配而不必对匹配进行某些处理的惯用方式是什么?
enum Kind {
A,
B(char),
}
let vector: Vec<Option<Kind>> = ...;
vector.filter(|item| /* check if item matches pattern Some(Kind::B(_)) */)
我知道我可以使用
match
关键字:vector.filter(|item| match item {
Some(Kind::B(_)) => true,
_ => false,
})
或
if let
关键字:vector.filter(|item| {
if let Some(Kind::B(_)) = item {
true
} else {
false
}
})
但是在两个示例中,代码仍然显得庞大,因为我需要手动提供
true
和false
常量。我觉得应该有一种更优雅的方式来做到这一点,类似于以下内容:
vector.filter(|item| matches(item, Some(Kind::B(_))))
最佳答案
有一个名为matches!
的宏!
vector.filter(|item| matches!(item, Some(Kind::B(_))))
关于rust - 用于检查表达式是否与Rust中的模式匹配的 bool 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61127510/