我们知道,除Display外Rust中还有一个类似的特征:Debug。Debug特征大伙都很熟悉,那什么时候该实现Display,什么时候该实现Debug呢? Display要求类型在任何时候都能够被可靠地表示为字符串;它并没有被硬性要求。 Debug是所有公共类型都应当实现的,并且一般来说不需要手动实现,而是应当使用#[derive(Debug)]。Debug的输出通常...
一个错误类型,应实现了std::error::Error这个trait,但重点是这个trait继承了Debug trait与Display trait,一般错误处理类型着重考虑去实现这两个trait。 以下有一个实例 usemy_mod::*;modmy_mod{#[derive(Debug, Clone, Copy, PartialEq)]pubenumMyErrorKind{TooSmall,TooLarge,}implstd::fmt::DisplayforMyErrorK...
复制 use std::error::Error;use std::fmt;use std::io::Read;#[derive(Debug)]struct FileNotFound(String);impl fmt::Display for FileNotFound { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "File not found: {}", self.0) }}impl Error for FileNotF...
上面的例子很简单,我们定义了一个错误类型,当为它派生了 Debug 特征,同时手动实现了 Display 特征后,该错误类型就可以作为 Err来使用了。 事实上,实现 Debug 和 Display 特征并不是作为 Err 使用的必要条件,大家可以把这两个特征实现和相应使用去除,然后看看代码会否报错。既然如此,我们为何要为自定义类型实现这两...
pub trait Error:Debug+Display{fnsource(&self)->Option<&(dyn Error+'static)>{...}fnbacktrace(&self)->Option<&Backtrace>{...}fndescription(&self)->&str{...}fncause(&self)->Option<&dyn Error>{...}} 也可以自定义数据类型,然后实现 Error trait。 幸运的是,我们可以用thiserror和anyhow来...
自定义的Error需要impl std::fmt::Debug的trait,当然我们只需要在默认对象上添加注解:#[derive(Debug)]即可 总结一下,自定义一个error需要实现如下几步: 手动实现implstd::fmt::Display的trait,并实现fmt(...)方法。 手动实现implstd::fmt::Debug的trait,一般直接添加注解即可:#[derive(Debug)] ...
在Rust 中,每个格式符号背后其实对应着一个特质(Trait),其中最经常用到的是 Display 和 Debug。目前,您不必深入了解特质的具体含义;可以简单地将其视作类似于接口的功能。 Display 特质在某种程度上类似于 Java 中每个对象的 toString 方法,它定义了如何将类型以一种用户友好的方式进行格式化输出。另一方面,Debug 特...
usestd::error::Error;usestd::fmt;usestd::fmt::Display;// 自定义错误类型,包含文件路径信息#[derive(Debug)]pubstructMyError{ msg:String, source:String, }// 为自定义错误类型实现Error traitimplErrorforMyError{}// 实现Display trait,以便于打印错误信息implfmt::DisplayforMyError{fnfmt(&self, f:...
usestd::fmt::Display;//生命周期标注和泛型同时使用,可以一起写在<>中fnlonger<'a,T>(x:&'astr...
自定义错误类型是FileNotFound构件。该类型含有文件路径,FileNotFound类型实现了Display特征以返回对用户友好的错误消息,并实现了Error特征以表明这是错误类型。 在read_file函数中,FileNotFound错误类型表示文件未找到错误,map_err方法将std::io:: Error转换成FileNotFound错误。最后,Box<dyn Error>类型允许函数返回实现...