使用结构的默认特征作为枚举选项
Use Default trait for struct as enum option
我有一个这样的枚举:
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
具有默认值。可能吗?
这目前是不可能的,因为枚举变体不是第一个 class 类型。有一个开放的 RFC 提出 "making enum variants first-class types": 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)
}
然后您可以为 A
、B
和 C
实施 Default
。
impl Default for A {
fn default() -> A {
A { opts: Vec::new() }
}
}
并将它们用作 A::default()
、B::default()
和 C::default()
。
我有一个这样的枚举:
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
具有默认值。可能吗?
这目前是不可能的,因为枚举变体不是第一个 class 类型。有一个开放的 RFC 提出 "making enum variants first-class types": 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)
}
然后您可以为 A
、B
和 C
实施 Default
。
impl Default for A {
fn default() -> A {
A { opts: Vec::new() }
}
}
并将它们用作 A::default()
、B::default()
和 C::default()
。