一个像Box<dyn std::error::Error>的类型可以构建于任意的特定具体错误,可以通过Display打印输出,并且可以通过动态地向下转换进行可选的暴露。anyhow[5]就是这种风格的最佳示例。 std::io::Error的这种情况比较有趣,是因为它想同时做到以上两点甚至更多。 这是std,所以封装和面向未来是最重要的。 来自操作系统的
大部分终端都提供了两种输出:标准输出(standard output,stdout)对应通用信息,标准错误(standard error,stderr)则用于错误信息。这种区别允许用户选择将程序正常输出定向到一个文件中并仍将错误信息打印到屏幕上。 但是println!函数只能够打印到标准输出,所以我们必需使用其他方法来打印到标准错误。 检查错误应该写入何处 首...
一个像Box<dyn std::error::Error>的类型可以构建于任意的特定具体错误,可以通过Display打印输出,并且可以通过动态地向下转换进行可选的暴露。anyhow就是这种风格的最佳示例。 std::io::Error的这种情况比较有趣,是因为它想同时做到以上两点甚至更多。 这是std,所以封装和面向未来是最重要的。 来自操作系统的 I/O...
之前我们借助讲解failure库,详细说明的Rust错误处理的哲学,这有助于我们理解今天的主题,anyhow和thiserror Anyhow提供了一个anyhow::Errortrait(有点类似failure::Error)。而得益于std::error::Error所做的修改,它anyhow::Error是与std::error::Error兼容的。也就是说,对于自定义的错误类型,只需要实现std::error::...
custom_error.rs: usestd::error::Error;usestd::fmt;usestd::fmt::Display;// 自定义错误类型,包含文件路径信息#[derive(Debug)]pubstructMyError{ msg:String, source:String, }// 为自定义错误类型实现Error traitimplErrorforMyError{}// 实现Display trait,以便于打印错误信息implfmt::DisplayforMyError{...
[from] std::io::Error), #[error("Parsing error in file")] ParsingFailure, #[error("Configuration error: {0}")] Config(String), } fn handle_data() -> Result<(), CustomError> { // 使用自定义错误类型 let contents = std::fs::read_to_string("config.json") .map_err(CustomError...
针对特定os的模块,主要在std::os模块中实现。 下图展示了Rust标准库各个领域功能涉及到的具体std模块(如std::io、std::os等) 以下着重对第四类的主要 crate 做一介绍,并附上文档地址 Rust的并发控制相关模块 conurrency: Rust的内存管理相关模块 memory management: ...
std::result:: result <T, E>类型是一个泛型Result类型,可以用来表示任何错误。 每种错误类型都有各自的一组方法和特征,用于以特定的方式来处理它。 下面是Rust中文件读取操作的错误处理示例: use std::fs::File; use std::io::Read; fn read_file(path: &str) -> Result<String, std::io::Error> ...
failure是rust-lang-nursery下的一个库,可以说是根正苗红的rust库了。其目标是取代基于std::eror::Error的错误处理。 failure有两个核心组件 Fail: 定制错误类型用的trait Error: 只要实现了Fail,就能转化为该结构体 Fail trait Fail trait被用来取代std::error::Error。它提供了backtrace和cause方法去获取错误的...
之前我们借助讲解failure库,详细说明的Rust错误处理的哲学,这有助于我们理解今天的主题,anyhow和thiserror Anyhow提供了一个anyhow::Errortrait(有点类似failure::Error)。而得益于std::error::Error所做的修改,它anyhow::Error是与std::error::Error兼容的。也就是说...