【发布时间】:2019-11-25 17:36:50
【问题描述】:
我正在尝试使用枚举变体来捕获本质上是异构的数据(具有不同的字段集合),但从协议的角度来看,这些数据具有相同的“类型”。但是,我不确定如何实现特定于子类型的方法和特征。这是一个关于如何创建数据枚举的最小示例,并且我可以使用枚举变体构造函数来指定类型,但是如果我在变体上实现特征,则调用该函数不是我想出的方法.
use std::fmt;
enum Data {
N(NData),
S(SData),
}
struct NData {
numeric: u32,
}
impl fmt::Display for NData {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.numeric)
}
}
struct SData {
stringy: Vec<String>,
}
fn main() {
let d_n: Data = Data::N(NData { numeric: 0x0 });
let n = NData { numeric: 0xff };
// Fails, fmt::Display not implemented for Data
println!("{}", d_n);
// Just fine!
println!("{}", n);
}
【问题讨论】:
-
请注意,您可能只想派生
Debugtrait -
@Stargateur:如果这就是我真正要做的,当然!但这是对我需要实现的实际特征的代表性简化。