如何读取与Rust中的自定义类型相关联的枚举的值?

时间:2019-02-25 12:03:11

标签: enums rust

我在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("test@email.com"),
        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

2 个答案:

答案 0 :(得分:2)

您可以在枚举上实现提取值的方法:

#[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());

答案 1 :(得分:1)

您可以使用if let语法对Query.One()进行模式匹配。

srange

将打印“太高”。