У меня есть Vec
значений и я хочу filter
тех, которые соответствуют определенному шаблону.
Что такое идиоматический c способ просто проверить , если выражение соответствует шаблону , не обязательно что-то делать с соответствием?
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(_))))