面试题答案
一键面试enum NestedEnum {
InnerInt(i32),
InnerNested(Box<NestedEnum>),
}
fn sum_nested_enum(enm: &NestedEnum) -> i32 {
match enm {
NestedEnum::InnerInt(num) => *num,
NestedEnum::InnerNested(nested) => sum_nested_enum(nested),
}
}
在实现过程中,match
表达式的嵌套和模式匹配特性被这样利用:
- 顶层模式匹配:
match enm
对传入的NestedEnum
实例进行模式匹配。它有两个分支,分别对应NestedEnum
的两个变体。 - 变体
InnerInt
:当匹配到InnerInt(num)
时,模式num
绑定到InnerInt
中的i32
值。这里直接返回这个值,因为它就是要累加的整数。 - 变体
InnerNested
:当匹配到InnerNested(nested)
时,模式nested
绑定到存放的Box<NestedEnum>
。由于这是一个递归结构,通过递归调用sum_nested_enum(nested)
来计算嵌套的NestedEnum
中所有整数的总和。这样,通过match
表达式的模式匹配和递归调用,就可以计算出整个嵌套枚举中所有整数的总和。