當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。