面试题答案
一键面试相同点
- 功能:
try!
宏与?
运算符都用于在函数中简便地处理错误。当表达式返回Err
时,它们都会提前返回Err
值给函数的调用者,避免了冗长的错误处理代码。 - 适用场景:主要用于处理返回
Result
类型值的函数调用,帮助开发者快速处理可能发生的错误。
不同点
- 语法形式:
try!
是宏,需要括号包裹表达式;?
是运算符,直接紧跟在表达式之后。 - 简洁性:
?
运算符更为简洁,在Rust 1.13版本引入后逐渐成为主流的错误处理方式,而try!
宏从Rust 1.0就存在,相对来说语法稍显繁琐。 - 返回值处理:
?
运算符返回值的类型会自动适配外层函数的返回类型,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)
}