?
运算符会导致错误,这很常见。例如,返回类型为Result<u32, &'static str>
的函数可能会导致如下错误:
file.read(&mut buffer)?;
^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<std::io::Error>` is not implemented for `&str`
函数返回类型和返回的错误之间的不匹配需要转换。但是,特质有时不可用。这使?
运算符不方便,并迫使诸如match
等之类的操作大量使用。
可以自动转换最常见的标准错误类型的典型返回类型是什么?
答案 0 :(得分:4)
您要寻找的类型是Box<dyn Error>
。 std::error::Error
是所有错误类型都应实现的特征。
具有多种错误类型的示例:
use std::{error::Error, fs::File, io::prelude::*};
fn main() -> Result<(), Box<dyn Error>> {
let mut file = File::create("foo.txt")?; // io::Error
file.write_all(b"Hello, world!")?; // io::Error
let _: i32 = "123".parse()?; // fmt::Error
Ok(())
}