MST

星途 面试题库

面试题:Rust异常处理模式匹配与泛型及生命周期的结合应用

定义一个泛型函数`fn handle_result<T, E: std::fmt::Debug>(res: Result<T, E>)`,该函数接受一个`Result`类型的值。在函数内部,使用模式匹配处理不同的情况:如果是`Ok`值,将其转换为`Box<T>`并打印内存地址;如果是`Err`值,打印错误信息,并且要考虑`E`类型可能包含生命周期的情况。要求函数在不同场景下都能正确编译和运行。请实现该函数并说明在处理可能带有生命周期的错误类型时需要注意什么。
45.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn handle_result<T, E: std::fmt::Debug>(res: Result<T, E>) {
    match res {
        Ok(value) => {
            let boxed_value = Box::new(value);
            println!("Ok value memory address: {:p}", &*boxed_value);
        },
        Err(error) => {
            println!("Error: {:?}", error);
        }
    }
}

在处理可能带有生命周期的错误类型时需要注意:

  • 确保错误类型E实现了std::fmt::Debug trait,以便可以使用{:?}格式化打印错误信息。
  • 由于E可能包含生命周期,在函数签名和使用E的地方,要确保生命周期的一致性和正确性,例如在定义函数时,生命周期会隐式地遵循Rust的生命周期省略规则,不需要显式声明。如果函数内部的操作涉及到引用E中的数据,要确保这些引用的生命周期是有效的且与函数的整体生命周期规则相符。