我有一个包含值的`Vec`,想要筛选出符合特定模式的值。
如果只是想检查一个表达式是否匹配某个模式,并不一定需要对匹配结果进行操作,有什么惯用方法吗?
我知道我可以使用“match”关键字:
如果只是想检查一个表达式是否匹配某个模式,并不一定需要对匹配结果进行操作,有什么惯用方法吗?
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!
宏 仅在 Rust 的最新版本(1.42.0)不到一个月前才被稳定下来,因此根据 Rust 上次更新的时间,可能需要更新才能使用它。 - Frxstrem