MST

星途 面试题库

面试题:Rust枚举与泛型trait结合及复杂逻辑实现

定义一个泛型枚举`MaybeValue<T>`,包含`Value(T)`和`NoValue`两个变体。定义一个`trait` `ProcessValue`,有一个方法`process`,该方法在`MaybeValue`为`Value`变体时对值进行平方操作(假设`T`为数字类型),在`NoValue`变体时返回0。使用泛型约束在`MaybeValue<T>`上实现`ProcessValue` trait,并编写测试代码验证功能。
19.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义泛型枚举
enum MaybeValue<T> {
    Value(T),
    NoValue,
}

// 定义trait
trait ProcessValue {
    fn process(&self) -> i32;
}

// 在MaybeValue<T>上实现ProcessValue trait
impl<T: std::ops::Mul<Output = T> + Into<i32>> ProcessValue for MaybeValue<T> {
    fn process(&self) -> i32 {
        match self {
            MaybeValue::Value(v) => {
                let squared: T = v * v;
                squared.into()
            }
            MaybeValue::NoValue => 0,
        }
    }
}

// 测试代码
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_process_value() {
        let value = MaybeValue::Value(2);
        assert_eq!(value.process(), 4);

        let no_value = MaybeValue::NoValue;
        assert_eq!(no_value.process(), 0);
    }
}