【发布时间】:2020-03-18 17:55:30
【问题描述】:
我希望枚举的行为类似于我之前定义的结构的变体:
pub struct Element {
symbol: String,
atomic_number: u8,
atomic_mass: f32,
}
pub struct Hydrogen {
element: Element,
}
pub struct Helium {
element: Element,
}
pub struct Lithium {
element: Element,
}
pub enum ElementKind {
HYDROGEN(Hydrogen),
HELIUM(Helium),
LITHIUM(Lithium,
}
impl Default for Hydrogen {
fn default() -> Self {
Hydrogen {
element: Element {
symbol: "H".to_string(),
atomic_number: 1,
atomic_mass: 1.008,
},
}
}
}
impl Default for Helium {
fn default() -> Self {
Helium {
element: Element {
symbol: "He".to_string(),
atomic_number: 2,
atomic_mass: 4.003,
},
}
}
}
impl Default for Lithium {
fn default() -> Self {
Lithium {
element: Element {
symbol: "Li".to_string(),
atomic_number: 3,
atomic_mass: 6.491,
},
}
}
}
fn main() {
let e = ElementKind::HYDROGEN;
match e {
// TODO
}
}
编写match 语句以便始终打印出元素的symbol 的正确方法是什么?
【问题讨论】:
-
您期望
element是什么?您永远不会使用该名称声明变量。看起来您可能将变体ElementKind::Hydrogen与结构Hydrogen混淆了。 -
应该是
e.symbol? -
你认为你在哪里创造了一个
Hydrogen类型的值? -
@nyarlathotep108 查看我以前的 cmets。
ElementKind::Hydrogen与Hydrogen是不同的类型。 -
Is there a way to use existing structs as enum variants?的答案可能会回答您的问题。如果没有,请edit您的问题解释差异。否则,我们可以将此问题标记为已回答。
标签: struct enums rust pattern-matching