很抱歉这个问题很长,但我不确定如何在提供 MWE 的同时缩短它。
我有一个枚举,其变体具有结构参数,以及枚举的向量:
struct A { x: i64, };
struct B { x: f64, },
enum E {
One(A),
Two(B),
// maybe others
};
fn main() {
let v = vec![ One( A { x: 10 } ), Two( B { x : 5. } ), /* others as well */ ];
// ...
}
在
v
中查找E::Two
.类型的元素
什么是简明的、Rust 惯用的方法来做到这一点?
使用可迭代的
find()
方法,无需在Eq
和PartialEq
上推导或实现A
和B
,因为我想找到相同枚举变体的东西;我真的不关心变体的内容。此外,导出 Eq
和 PartialEq
是矫枉过正,并且会变得痛苦。
这两种可能性都没有使用首选方法。
find
我在网上的某个地方找到了这个(甚至可能是这样)
let mut index = 0;
let thing = loop {
if let E::Two ( b ) = v[index] {
break Some(b);
}
index += 1;
};
find
,但需要推导为类型
Eq
、PartialEq
和A
实现或派生B
和E
。现在就这么简单
let Some(thing) = v.iter().find(|element| if let E::Two(b) = element {true} else {false})
else {
panic!("failure! :-("); // I know this won't happen
};