Rust枚举类型模式匹配:忽略变体参数的实现问题
解决Rust枚举变体的无参数依赖模式匹配问题
首先你代码里有个明显错误:impl Operator应该改为impl Foo,因为value方法的self是Foo类型的实例,否则会编译失败。
针对你想仅匹配枚举变体类型、忽略所有参数且无需随枚举定义变更修改匹配模式的需求,Rust提供了..模式语法来实现:
修正后的代码
enum Foo { Bar(usize, usize), Baz(isize), } impl Foo { fn value(&self) -> usize { use Foo::*; match self { Bar(..) => 1, Baz(..) => 2, } } }
原理说明
..在模式匹配中表示忽略当前变体的所有参数,不管变体有1个、2个还是更多参数,这个模式都能精准匹配到对应的变体类型。- 你之前尝试的几种写法失败原因:
Bar(_)只能匹配单参数变体,但Bar实际是双参数,编译报错;- 直接写
Bar会被Rust识别为构造函数而非匹配模式,无法匹配实例; Bar()仅匹配无参数变体,和实际定义不符,同样报错。
使用..后,就算后续修改Bar的参数数量(比如改成Bar(usize)或Bar(usize, usize, bool)),匹配模式也不需要做任何改动,完全满足你的需求。
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

