MST

星途 面试题库

面试题:Rust中match表达式的嵌套与复杂模式匹配技巧

假设有一个嵌套的枚举类型`NestedEnum`,它有两个变体,一个变体`InnerInt(i32)`存放一个整数,另一个变体`InnerNested(Box<NestedEnum>)`存放另一个`NestedEnum`的Box指针。编写一个函数,接收一个`NestedEnum`类型参数,使用`match`表达式实现递归计算这个嵌套枚举中所有整数的总和。阐述你在实现过程中是如何利用`match`表达式的嵌套和模式匹配特性的。
14.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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表达式的嵌套和模式匹配特性被这样利用:

  1. 顶层模式匹配match enm对传入的NestedEnum实例进行模式匹配。它有两个分支,分别对应NestedEnum的两个变体。
  2. 变体InnerInt:当匹配到InnerInt(num)时,模式num绑定到InnerInt中的i32值。这里直接返回这个值,因为它就是要累加的整数。
  3. 变体InnerNested:当匹配到InnerNested(nested)时,模式nested绑定到存放的Box<NestedEnum>。由于这是一个递归结构,通过递归调用sum_nested_enum(nested)来计算嵌套的NestedEnum中所有整数的总和。这样,通过match表达式的模式匹配和递归调用,就可以计算出整个嵌套枚举中所有整数的总和。