面试题答案
一键面试区别
- 语法形式:
try!
是一个宏,语法为try!(表达式)
,它将表达式中返回的Result
或Option
类型的值进行处理,如果是Err
或None
,则直接返回这个错误或None
值。?
是一个运算符,直接跟在表达式后面,语法为表达式?
,它的功能和try!
宏类似,但写法更简洁。
- 返回值处理:
try!
宏可以用于任何函数中,无论函数返回类型是否为Result
。它会将Err
值包装成当前函数返回类型合适的Err
值(需要手动处理转换逻辑)。?
运算符只能用于返回类型为Result
的函数中,它会自动将Err
值直接作为函数的返回值返回,无需额外包装。
代码示例
- try!宏示例:
fn process_with_try() -> Result<String, std::io::Error> {
let file_content = try!(std::fs::read_to_string("example.txt"));
Ok(file_content)
}
在这个例子中,std::fs::read_to_string
函数返回一个Result
类型。try!
宏处理这个Result
,如果是Err
,则直接返回这个Err
值作为process_with_try
函数的返回值。
2. ?运算符示例:
fn process_with_question() -> Result<String, std::io::Error> {
let file_content = std::fs::read_to_string("example.txt")?;
Ok(file_content)
}
这里使用?
运算符,功能和上面try!
宏类似,但写法更简洁。?
运算符只能用于返回Result
类型的函数process_with_question
中,它直接将std::fs::read_to_string
返回的Err
值作为process_with_question
函数的返回值。