当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Error.chain用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 std::error::Error.chain。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。