我在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/

10-11 02:06