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


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