rust - 用于检查表达式是否与Rust中的模式匹配的 bool 表达式

标签 rust pattern-matching matching

我有一个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
  }
})

但是在两个示例中,代码仍然显得庞大,因为我需要手动提供truefalse常量。
我觉得应该有一种更优雅的方式来做到这一点,类似于以下内容:

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/

相关文章:

javascript - JavaScript 中的模式匹配

r - 通过两个数据帧和一个矩阵进行匹配和索引

rust - 减少深度嵌套属性的匹配缩进

haskell - 当模式匹配失败时,为什么 Haskell 列表推导不会导致错误?

generics - 特征的泛型类型和泛型关联类型有什么区别?

Erlang 模式与别名匹配

java - 如何使用正则表达式匹配多个单词

sql - 我如何去匹配两个表中的三个字段以便在匹配的情况下更新相同的表

arrays - 如何在 Rust 中将一串数字转换为数组或整数向量?

rust - 启用项目功能时启用 Rust nightly 功能