MST

星途 面试题库

面试题:Rust枚举类型与泛型结合的复杂模式匹配场景

定义一个泛型枚举 `MaybeValue`,它有两个变体:`Empty` 和 `Value(T)`,其中 `T` 是泛型类型参数。编写一个函数 `process_maybe_value`,它接受 `MaybeValue` 作为参数,通过模式匹配,当遇到 `Empty` 变体时返回 `None`,当遇到 `Value(T)` 变体时,如果 `T` 实现了 `Add` trait(假设 `T` 是数字类型),则将其值加1后返回 `Some` 包裹的结果,否则返回 `None`。请完整实现该功能,并在主函数中进行多种类型的测试。
22.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::ops::Add;

// 定义泛型枚举
enum MaybeValue<T> {
    Empty,
    Value(T),
}

// 定义处理函数
fn process_maybe_value<T>(mv: MaybeValue<T>) -> Option<T>
where
    T: Add<Output = T> + Copy,
{
    match mv {
        MaybeValue::Empty => None,
        MaybeValue::Value(val) => Some(val + T::from(1)),
    }
}

fn main() {
    // 测试i32类型
    let mv_i32: MaybeValue<i32> = MaybeValue::Value(5);
    assert_eq!(process_maybe_value(mv_i32), Some(6));

    let mv_empty_i32: MaybeValue<i32> = MaybeValue::Empty;
    assert_eq!(process_maybe_value(mv_empty_i32), None);

    // 测试f64类型
    let mv_f64: MaybeValue<f64> = MaybeValue::Value(5.5);
    assert_eq!(process_maybe_value(mv_f64), Some(6.5));

    let mv_empty_f64: MaybeValue<f64> = MaybeValue::Empty;
    assert_eq!(process_maybe_value(mv_empty_f64), None);
}