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


Rust Error.get_mut用法及代码示例


本文简要介绍rust语言中 std::io::Error.get_mut 的用法。

用法

pub fn get_mut(&mut self) -> Option<&mut (dyn Error + Send + Sync + 'static)>

返回对此错误包装的内部错误的可变引用(如果有)。

如果此 Error 是通过 new 构造的,则此函数将返回 Some ,否则将返回 None

例子

use std::io::{Error, ErrorKind};
use std::{error, fmt};
use std::fmt::Display;

#[derive(Debug)]
struct MyError {
    v: String,
}

impl MyError {
    fn new() -> MyError {
        MyError {
            v: "oh no!".to_string()
        }
    }

    fn change_message(&mut self, new_message: &str) {
        self.v = new_message.to_string();
    }
}

impl error::Error for MyError {}

impl Display for MyError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "MyError: {}", &self.v)
    }
}

fn change_error(mut err: Error) -> Error {
    if let Some(inner_err) = err.get_mut() {
        inner_err.downcast_mut::<MyError>().unwrap().change_message("I've been changed!");
    }
    err
}

fn print_error(err: &Error) {
    if let Some(inner_err) = err.get_ref() {
        println!("Inner error: {}", inner_err);
    } else {
        println!("No inner error");
    }
}

fn main() {
    // Will print "No inner error".
    print_error(&change_error(Error::last_os_error()));
    // Will print "Inner error: ...".
    print_error(&change_error(Error::new(ErrorKind::Other, MyError::new())));
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::io::Error.get_mut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。