面试题答案
一键面试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
变量的生命周期相关联,避免了悬空引用的问题。