我在Rust中有一个实现,如下所示。在主要功能中,我正在读取SalaryRange
枚举中的一个值,这将显示High("So High")
。
// This can be a complex type, just using string for the question
type SRange = String;
type SalEnu = SalaryRange<SRange>;
struct User<SRange> {
username: String,
email: String,
sign_in_count: u64,
active: bool,
income: Income<SRange>,
}
struct Income<SRange> {
salary_range: SalaryRange<SRange>
}
#[derive(Debug)]
enum SalaryRange<SRange> {
Low(SRange),
Mid(SRange),
High(SRange),
}
fn main() {
let user1 = User {
email: String::from("[email protected]"),
username: String::from("test_name"),
active: true,
sign_in_count: 1,
income: Income {
salary_range: (
SalaryRange::High("So High")
)
},
};
let mut srange: SalaryRange<&str> = user1.income.salary_range;
println!("{:?}", srange);
}
可以在此处找到此example的链接。
只是想知道是否有可能以
println!("{:?}", srange::High);
的形式读取并打印该枚举中的值,只是打印出字符串值?我只想打印
So High
值。如果我使用
srange::High
,这将引发错误提示 println!("{:?}", srange::High);
| ^^^^^^ use of undeclared type or module `srange`
error: aborting due to previous error
最佳答案
您可以在枚举上实现一种方法来提取值:
#[derive(Debug)]
enum SalaryRange<S> {
Low(S),
Mid(S),
High(S),
}
impl<S> SalaryRange<S> {
fn value(&self) -> &S {
match self {
SalaryRange::Low(value) => value,
SalaryRange::Mid(value) => value,
SalaryRange::High(value) => value,
}
}
}
println!("{:?}", srange.value());
关于enums - 如何读取与Rust中的自定义类型相关联的枚举的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54865801/