本文简要介绍rust语言中 std::error::Error.chain
的用法。
用法
pub fn chain(&self) -> Chain<'_>
返回从当前错误开始并继续递归调用 Error::source
的迭代器。
如果您想省略当前错误并仅使用其来源,请使用 skip(1)
。
例子
#![feature(error_iter)]
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct A;
#[derive(Debug)]
struct B(Option<Box<dyn Error + 'static>>);
impl fmt::Display for A {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "A")
}
}
impl fmt::Display for B {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "B")
}
}
impl Error for A {}
impl Error for B {
fn source(&self) -> Option<&(dyn Error + 'static)> {
self.0.as_ref().map(|e| e.as_ref())
}
}
let b = B(Some(Box::new(A)));
// let err : Box<Error> = b.into(); // or
let err = &b as &(dyn Error);
let mut iter = err.chain();
assert_eq!("B".to_string(), iter.next().unwrap().to_string());
assert_eq!("A".to_string(), iter.next().unwrap().to_string());
assert!(iter.next().is_none());
assert!(iter.next().is_none());
相关用法
- Rust Error.source用法及代码示例
- Rust Error.last_os_error用法及代码示例
- Rust Error.description用法及代码示例
- Rust Error.kind用法及代码示例
- Rust Error.from_raw_os_error用法及代码示例
- Rust Error.get_ref用法及代码示例
- Rust Error.into_inner用法及代码示例
- Rust Error.new用法及代码示例
- Rust Error.get_mut用法及代码示例
- Rust Error.raw_os_error用法及代码示例
- Rust Error用法及代码示例
- Rust Entry.or_insert_with用法及代码示例
- Rust ExitStatus.code用法及代码示例
- Rust Eq用法及代码示例
- Rust Entry.or_insert用法及代码示例
- Rust ExactSizeIterator.is_empty用法及代码示例
- Rust Extend.extend用法及代码示例
- Rust Entry.and_modify用法及代码示例
- Rust ExitStatusError.code用法及代码示例
- Rust ExactSizeIterator用法及代码示例
- Rust ExitStatusError用法及代码示例
- Rust ExitStatus.exit_ok用法及代码示例
- Rust Entry.or_insert_with_key用法及代码示例
- Rust Entry.key用法及代码示例
- Rust Entry.or_default用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::error::Error.chain。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。