通常缺少标准错误类型的转换特征

时间:2018-08-13 12:56:38

标签: rust

?运算符会导致错误,这很常见。例如,返回类型为Result<u32, &'static str>的函数可能会导致如下错误:

file.read(&mut buffer)?;
^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<std::io::Error>` is not implemented for `&str`

函数返回类型和返回的错误之间的不匹配需要转换。但是,特质有时不可用。这使?运算符不方便,并迫使诸如match等之类的操作大量使用。

可以自动转换最常见的标准错误类型的典型返回类型是什么?

1 个答案:

答案 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(())
}