我有一个这样的枚举:
enum States {
A { opts: Vec<States> },
B { opts: Vec<States> },
C { opts: Vec<States> },
}
我想为它实现Default
特征。不是枚举本身:
impl Default for States {
fn default() -> States {
States::A { vec![] }
}
}
但对于States::A
,States::B
和States::C
,要设置opts
的默认值。有可能吗?
答案 0 :(得分:4)
目前这不可能,因为枚举变体不是头等类型。有一个开放的RFC提出“制作枚举变体的一流类型”:RFC 1450。在接受并实现之前,大多数人使用的解决方法是为每个变体创建适当的结构,然后创建一个包含这些结构的简单枚举:
struct A { opts: Vec<States> }
struct B { opts: Vec<States> }
struct C { opts: Vec<States> }
enum States {
A(A),
B(B),
C(C)
}
然后,您可以为Default
,A
和B
实施C
。
impl Default for A {
fn default() -> A {
A { opts: Vec::new() }
}
}
并将其用作A::default()
,B::default()
和C::default()
。