MST

星途 面试题库

面试题:Rust枚举类型变体与泛型及生命周期的深度融合

定义一个泛型枚举类型`MaybeResult<T, E>`,它有两个变体:`Ok(T)`和`Err(E)`,这里`T`和`E`是泛型类型。然后编写一个函数`unwrap_or_log`,该函数接受一个`MaybeResult<T, E>`类型的参数和一个生命周期为`'a`的字符串切片`log_message: &'a str`。如果枚举变体是`Ok`,函数返回`Ok`中的值;如果是`Err`,将错误信息`E`(假设`E`实现了`std::fmt::Debug` trait)和`log_message`打印到标准错误输出,并返回一个默认值(这个默认值的类型需要与`T`一致,你需要根据`T`的类型来确定如何生成默认值)。此外,要确保在整个函数实现过程中,泛型类型和生命周期的使用都是正确且高效的。
22.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fmt::Debug;

// 定义泛型枚举类型
enum MaybeResult<T, E> {
    Ok(T),
    Err(E),
}

// 实现默认值生成函数
fn default_value<T>() -> T
where
    T: Default,
{
    T::default()
}

// 实现unwrap_or_log函数
fn unwrap_or_log<T, E>(result: MaybeResult<T, E>, log_message: &str) -> T
where
    E: Debug,
    T: Default,
{
    match result {
        MaybeResult::Ok(value) => value,
        MaybeResult::Err(error) => {
            eprintln!("Error: {:?}, Log Message: {}", error, log_message);
            default_value()
        }
    }
}