MST

星途 面试题库

面试题:Rust函数复杂模式匹配与引用的应用

编写一个Rust函数,它接收一个包含i32类型元素的Result枚举值,Result的Err类型为String。使用模式匹配来处理Ok和Err情况。如果是Ok,将值进行位运算(例如按位与操作,与值5进行按位与)并返回结果;如果是Err,将错误信息打印到标准错误输出,并返回0。另外,说明如何通过引用传递参数来优化性能,同时避免悬空引用的问题。
20.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn process_result(result: Result<i32, String>) -> i32 {
    match result {
        Ok(value) => value & 5,
        Err(error) => {
            eprintln!("Error: {}", error);
            0
        }
    }
}

通过引用传递参数优化性能并避免悬空引用

为了通过引用传递参数优化性能,函数签名可以接受&Result<i32, String>。要避免悬空引用,确保引用的生命周期足够长。例如,如果Result是在调用函数的作用域内创建的,只要调用函数的作用域存在,引用就不会悬空。

fn process_result_ref(result_ref: &Result<i32, String>) -> i32 {
    match result_ref {
        Ok(value) => *value & 5,
        Err(error) => {
            eprintln!("Error: {}", error);
            0
        }
    }
}

在调用process_result_ref函数时,传递&引用,如下:

fn main() {
    let result: Result<i32, String> = Ok(10);
    let result_ref = &result;
    let result_value = process_result_ref(result_ref);
    println!("Result value: {}", result_value);
}

这样就通过引用传递参数优化了性能,同时由于引用的生命周期与result变量的生命周期相关联,避免了悬空引用的问题。