MST

星途 面试题库

面试题:Rust中unwrap_or_else和expect方法在错误处理上的差异之基础运用

假设有一个Result类型的变量`result: Result<i32, String>`,它可能包含一个整数或者一个错误字符串。请分别使用`unwrap_or_else`和`expect`方法处理这个变量,展示它们在代码实现和行为上的区别。同时说明如果`result`是`Err`时,这两个方法会有怎样不同的表现。
24.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 使用unwrap_or_else方法

    fn main() {
        let result: Result<i32, String> = Err("Error occurred".to_string());
        let value = result.unwrap_or_else(|err| {
            eprintln!("Error: {}", err);
            -1
        });
        println!("Value: {}", value);
    }
    
    • 代码实现unwrap_or_else接受一个闭包作为参数。当ResultErr时,闭包会被调用,闭包可以根据错误进行处理并返回一个默认值。
    • 行为:无论resultOk还是Err,程序都会继续执行。如果是Ok,则返回Ok中的值;如果是Err,则执行闭包并返回闭包的返回值。
    • Err时表现:执行闭包中的代码,比如这里会打印错误信息,然后返回闭包中指定的默认值(这里是-1)。
  2. 使用expect方法

    fn main() {
        let result: Result<i32, String> = Err("Error occurred".to_string());
        let value = result.expect("Error happened");
        println!("Value: {}", value);
    }
    
    • 代码实现expect接受一个字符串作为参数,这个字符串用于在Err时作为错误信息。
    • 行为:如果resultOk,则返回Ok中的值;如果是Err,则程序会以指定的错误信息恐慌(panic!)并终止。
    • Err时表现:程序会panic!,打印出expect中传入的错误信息和Err中的具体错误信息,然后终止程序。

总结:unwrap_or_else允许在Err时进行自定义处理并继续执行程序,而expectErr时会使程序恐慌并终止,适用于期望操作不会失败,失败则意味着程序逻辑错误的场景。