gpt4 book ai didi

rust - 从实现 `Error` 特征的对象实现通用转换

转载 作者:行者123 更新时间:2023-11-29 07:51:28 25 4
gpt4 key购买 nike

我无法编译以下代码。

  • 我得到一个错误 From已经实现。
  • 如果我删除 From 的手动实现我收到错误 From未实现。
  • 如果我不执行 Error它工作正常。

我想这是由于空白实现 impl<T> From<T> for T 造成的在核心。我应该如何解决这个问题?未实现 Error这不是一个真正的选择。

代码 ( playground )

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

#[derive(Debug)]
enum ErrorType {
Other(Box<Error>)
}

impl fmt::Display for ErrorType {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
fmt.write_str("not implemented")
}
}

impl Error for ErrorType {
fn description(&self) -> &str {
use self::ErrorType::*;
match *self {
Other(ref err) => err.description(),
}
}
}

impl<E: Error + 'static> From<E> for ErrorType {
fn from(other: E) -> Self {
ErrorType::Other(Box::new(other))
}
}

fn ret_io_err() -> Result<(), io::Error> {
Ok(())
}

fn ret_error_type() -> Result<(), ErrorType> {
try!(ret_io_err());
Ok(())
}

fn main() {}

最佳答案

你不知道。

无论如何,该实现有点无用。这意味着 所有 其他错误类型将立即被装箱。到那时,您不妨只使用涉及 Box<Error> 的现有转换。并使用 that 代替。

如果你想要一个实际上保留统一错误类型的错误类型,你需要实现From他们每个人一次。 error-type crate 可以帮助定义统一的错误类型。

关于rust - 从实现 `Error` 特征的对象实现通用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com