【GHS】对rust中的std::io::error的研究(4)

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2020-12-30

对std::io::Error总结一下:

封装其内部表示,并通过对较大的枚举变量进行 boxing 来优化,

通过ErrorKind模式提供一种便利的方式来基于类别处理错误,

如果有的话,可以完全暴露底层操作系统的错误。

可以透明地包装(wrap)任意其他的错误类型。

最后一点意味着,io::Error可以被用于ad-hoc[6]错误,因为&str和 String 可以转为Box:

io::Error::new(io::ErrorKind::Other, "something went wrong")
它还可以被用于anyhow[7]的简单替换。我认为一些库可能会通过下面这种方式简化其错误处理:

io::Error::new(io::ErrorKind::InvalidData, my_specific_error)
例如,serde_json[8]提供下面的方式:

fn from_reader(rdr: R) -> Result
where
R: Read,
T: DeserializeOwned,
Read会 fail,并带有io::Error,所以serde_json::Error需要能够表示io::Error。我认为这是倒退(但是我不了解完整的背景,如果我被证明是错的,那我会很高兴),并且签名应该是下面这样(下帖)

成为第一个回答人

评论

登录后才可发表内容
  • 主题

    15

  • 帖子

    15

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0891s Mem:2057Kb