MST

星途 面试题库

面试题:Rust中try!宏与?运算符在错误处理上的异同

请阐述Rust语言中try!宏与?运算符在错误处理方面的相同点和不同点,并各举一个简单示例代码说明。
38.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

相同点

  1. 功能try!宏与?运算符都用于在函数中简便地处理错误。当表达式返回Err时,它们都会提前返回Err值给函数的调用者,避免了冗长的错误处理代码。
  2. 适用场景:主要用于处理返回Result类型值的函数调用,帮助开发者快速处理可能发生的错误。

不同点

  1. 语法形式try!是宏,需要括号包裹表达式;?是运算符,直接紧跟在表达式之后。
  2. 简洁性?运算符更为简洁,在Rust 1.13版本引入后逐渐成为主流的错误处理方式,而try!宏从Rust 1.0就存在,相对来说语法稍显繁琐。
  3. 返回值处理?运算符返回值的类型会自动适配外层函数的返回类型,try!宏则会根据上下文推导返回类型。

示例代码

try!宏示例

fn read_file() -> Result<String, std::io::Error> {
    let mut file = try!(std::fs::File::open("test.txt"));
    let mut content = String::new();
    try!(file.read_to_string(&mut content));
    Ok(content)
}

###?运算符示例

fn read_file() -> Result<String, std::io::Error> {
    let mut file = std::fs::File::open("test.txt")?;
    let mut content = String::new();
    file.read_to_string(&mut content)?;
    Ok(content)
}