相关疑难解决方法(0)

如何在Rust中定义自定义`Error`类型?

我正在编写一个可以返回几个不同错误中的几个错误的函数.

fn foo(...) -> Result<..., MyError> {}
Run Code Online (Sandbox Code Playgroud)

我可能需要定义自己的错误类型来表示这样的错误.我假设这可能是一个enum错误,一些enum变种附带了诊断数据:

enum MyError {
    GizmoError,
    WidgetNotFoundError(widget_name: String)
}
Run Code Online (Sandbox Code Playgroud)

这是最惯用的方式吗?我该如何实现这个Error特性?

error-handling rust

33
推荐指数
3
解决办法
8795
查看次数

如何在Rust中为具体的错误类型和Box &lt;Error&gt;实施From?

这是我的测试代码:

use std::error::Error;
use std::fmt;

struct Handler {
    error: String
}

#[derive(Debug)]
struct SpecificError;

impl fmt::Display for SpecificError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "SpecificError")
    }
}

impl Error for SpecificError {}

impl<E: Error> From<E> for Handler {
    fn from(e: E) -> Self {
        Handler { error: format!("{}", e) }
    }
}

fn fail1() -> Result<(), SpecificError> {
    Err(SpecificError)
}

fn fail2() -> Result<(), Box<Error>> {
    Err(Box::new(SpecificError))
}

fn handler() -> Result<(), Handler> {
    fail1()?;
    fail2()?; …
Run Code Online (Sandbox Code Playgroud)

rust

3
推荐指数
1
解决办法
194
查看次数

标签 统计

rust ×2

error-handling ×1