【发布时间】:2020-10-18 03:52:57
【问题描述】:
我需要存储一个枚举判别向量来进行比较:
use std::mem;
enum Thing {
Foo(usize),
Bar(usize, usize),
}
let ds: Vec<mem::Discriminant<Thing>> = vec![/* ??? */];
// ...
let thing: Thing = Foo(1234);
for d in ds.iter() {
if mem::discriminant(thing) == d {
println!("yay");
}
}
在实践中,将使用一个宏来生成此判别式列表,以匹配枚举列表中的上下文。
例如,我们可能有这样的东西:
enum Thing {
A(usize),
B(f32),
C(u8, u8, u8),
}
context_rule! {
A(a) B(b) C(c) B(d) : a + b + c < d => C(b * c)
}
这应该生成一个与vec![A, B, C, B] 对应的判别向量进行检查。
【问题讨论】: