14 个版本
使用旧的 Rust 2015
0.1.9 | 2015年12月10日 |
---|---|
0.1.8 | 2015年12月10日 |
0.1.7 | 2015年4月17日 |
0.1.4 | 2015年3月26日 |
0.0.1 | 2014年11月22日 |
#2132 在 Rust 模式
3,542 每月下载量
在 86 个crate(直接使用3个) 中使用
7KB
84 行
Error
适用于每个人的可扩展、类型安全的错误。
动机
Rust 需要一个可扩展的错误类型解决方案——这是其中一种尝试。
此crate提供Error
trait,该trait定义了与错误交互的简单接口。
概述
Error 包含几个不可变的getter,仅是一个用于定义清晰、可互操作错误接口的壳。这个crate真正的魔法在于ErrorRefExt
trait,它提供了用于检查Error
trait对象是否是特定错误的is
和downcast
方法。
这些方法与在std::any::Any
上找到的方法非常相似,这些方法允许运行时反射。当将这些方法应用于错误时,其好处是巨大的,因为它允许错误处理器通过Box<Error>
trait对象接受一个泛型错误,然后尝试处理它们可以处理的错误类型,如果它们无法完全处理错误,则转发错误。
主要好处是它允许一个可扩展的错误系统,其中错误不仅可以轻松传播,还可以跨库边界进行处理。
示例
#[deriving(Show, PartialEq)]
pub struct ParseError {
location: uint,
}
impl Error for ParseError {
fn name(&self) -> &'static str { "Parse Error" }
}
#[test] fn test_generic() {
fn produce_parse_error() -> Box<Error> {
box ParseError { location: 7u }
}
fn generic_handler(raw: Box<Error>) {
let parse = raw.downcast::<ParseError>().unwrap();
assert_eq!(*parse, ParseError { location: 7u });
}
generic_handler(produce_parse_error())
}
依赖关系
~8KB