匹配较少的样板

ste*_*era 0 rust

我有嵌套的结构enums,即.enum X有一个包含enum Y等的变体.有没有办法访问字段,例如x.y.z,如果x.y.z不存在运行时错误(例如,x是错误的变体).此外,这是一个相当道德的事情,还是有更好的选择,没有match声明无处不在?效率并不是那么重要,尽管让它尽可能便宜会很好.

Vla*_*eev 5

无法使用点语法访问嵌套枚举,但您可以使用if let:

pub enum X {
    A(Y),
    B(Z)
}

pub enum Y {
    C,
    D(u32)
}

pub enum Z {
    E
}

fn main() {
    let x = X::A(Y::D(12));

    if let X::A(Y::D(n)) = x {
        println!("Got it: {}", n);
    } else {
        println!("Nope");
    }
}
Run Code Online (Sandbox Code Playgroud)

(在这里试试)

if let使代码可以说比简洁更简洁match.当然,这是有效的match.