【发布时间】:2020-12-24 23:39:22
【问题描述】:
我的代码要求枚举在继续之前是某种类型(如果不是,那么这是一个不可恢复的错误)。用if let 模式表达这一点会导致很多缩进和语法噪音。这是一个例子:
enum Fruit {
Apple(i32),
Banana(i32, i32),
}
enum Veggie {
Tomato(bool),
Pepper(i32),
}
fn test() -> i32 {
let fruit = fruit_producing_func();
if let Fruit::Apple(x) = fruit {
let veggie = veggie_producing_func(x);
if let Veggie::Pepper(y) = veggie {
y
} else {
panic!();
}
} else {
panic!();
}
}
在我的代码中,这种嵌套比 2 层大得多。有没有更简洁的方式来表达这一点,避免创建额外的块,甚至避免重复 panic! 语句?简单地做:
let Fruit::Apple(x) = fruit;
导致错误,因为 let 绑定必须是详尽的(我希望它会在匹配失败时出现恐慌)。
【问题讨论】:
标签: rust enums pattern-matching flatten