Mar*_*cel 2 pattern-matching matching rust
我有一个Vec值,并且想要filter那些匹配特定模式的值。
什么是惯用的办法只有检查,如果一个表达式匹配的模式,而不必做一些与比赛?
enum Kind {
A,
B(char),
}
let vector: Vec<Option<Kind>> = ...;
vector.filter(|item| /* check if item matches pattern Some(Kind::B(_)) */)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用match关键字:
vector.filter(|item| match item {
Some(Kind::B(_)) => true,
_ => false,
})
Run Code Online (Sandbox Code Playgroud)
或if let关键字:
vector.filter(|item| {
if let Some(Kind::B(_)) = item {
true
} else {
false
}
})
Run Code Online (Sandbox Code Playgroud)
但是在这两个示例中,代码看起来仍然很庞大,因为我需要手动提供true和false常量。我觉得应该有一种更优雅的方式来做到这一点,类似于以下内容:
vector.filter(|item| matches(item, Some(Kind::B(_))))
Run Code Online (Sandbox Code Playgroud)
有一个matches!为此命名的宏!
vector.filter(|item| matches!(item, Some(Kind::B(_))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |