面试题答案
一键面试- 一般流程:
- 定义函数返回类型为
Result
,Result
有两个泛型参数,第一个是成功时返回的类型,第二个是失败时返回的错误类型。 - 在函数内部,当发生与栈内存相关的异常(例如栈溢出等,虽然Rust在这方面有较好的安全性,但可假设类似场景),使用
Err
构造函数返回错误值。 - 在调用该函数的地方,使用
match
语句或unwrap
、expect
等方法处理Result
。match
语句可以对成功和失败情况分别处理,unwrap
在成功时返回值,失败时panic,expect
类似unwrap
,但可以提供自定义的panic信息。
- 定义函数返回类型为
- 示例:
// 定义一个函数,从栈上分配内存,可能因条件失败
fn allocate_stack_memory(size: usize) -> Result<Vec<i32>, &'static str> {
if size > 100 {
Err("内存分配过大,超过限制")
} else {
Ok(vec![0; size])
}
}
fn main() {
let result1 = allocate_stack_memory(50);
match result1 {
Ok(data) => println!("成功分配内存,数据长度: {}", data.len()),
Err(e) => println!("分配失败: {}", e),
}
let result2 = allocate_stack_memory(200);
// 使用unwrap方法,如果失败会panic
// let data2 = result2.unwrap();
// 使用expect方法,如果失败会panic并显示自定义信息
let data2 = result2.expect("无法分配所需内存");
}
在上述示例中,allocate_stack_memory
函数根据传入的size
判断是否能成功从栈上分配内存(这里只是模拟,实际Rust的内存管理更复杂且安全),如果能分配返回Ok
包裹的Vec<i32>
,否则返回Err
包裹的错误信息。在main
函数中,通过match
语句和expect
方法分别展示了处理Result
的不同方式。