enums - 如何在没有模式匹配的情况下比较枚举

标签 enums pattern-matching rust

我想在迭代器上应用 filter,我想出了这个并且它有效,但它 super 冗长:

.filter(|ref my_struct| match my_struct.my_enum { Unknown => false, _ => true })

我宁愿这样写:

.filter(|ref my_struct| my_struct.my_enum != Unknown)

这给了我一个编译错误

binary operation `!=` cannot be applied to type `MyEnum`

是否有替代冗长模式匹配的方法?我在寻找宏,但找不到合适的宏。

最佳答案

使用matches! ,例如:

matches!(my_struct.my_enum, Unknown)

或者,您可以使用 PartialEq 特性,例如,通过 #[derive]:

#[derive(PartialEq)]
enum MyEnum { ... }

然后您的“理想”变体将按原样工作。然而,这需要 MyEnum 的内容也实现 PartialEq,这并不总是可能/想要的。

关于enums - 如何在没有模式匹配的情况下比较枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25576748/

相关文章:

java - 为什么 Java 需要 EnumClass.VALUE 而不仅仅是 VALUE?

mongodb - 使用 Rust Mongo 驱动程序原型(prototype)时,如何将 chrono::DateTime 字段序列化为 ISODate?

Java 正则表达式不匹配?

multithreading - 我可以安全地对不应该是多线程的东西进行多线程处理吗?

rust - 如何在 Ref<HashMap<K, V>> 上调用 get 函数并返回 Option<Ref<T>>?

c++ - 具有枚举返回类型的函数无法在 C++ 类中解析

c - 为什么模数对 int 和 enum 的处理方式不同?

mongodb - typegoose 中枚举的建模列表

java - 模式匹配

parsing - 使用scala的日志解析策略