gpt4 book ai didi

rust - 结果类型未在名为 `unwrap` 的范围内实现方法

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

出于某种原因,Rust 编译器提示 Result 没有实现 unwrap,即使我提供的错误类型确实实现了 Debug。下面提供了出错的代码。

use std::fmt::{Display, Debug};
use std::error::Error;

trait MyError: Error + Display + Debug {}
type MyResult<T> = Result<T, MyError>;

trait Foo: Clone {}

trait MyTrait {
fn my_function<T: Foo>(&self) -> MyResult<T>;

fn unwrap_function<T: Foo>(&self) -> T {
self.my_function().unwrap()
}
}

最佳答案

当你定义你的类型时

type MyResult<T> = Result<T, MyError>;

您实际上将类型定义为 unsized type作为MyError不是具体类型,而是特征。但是,执行 Result<T, E>

impl<T, E> Result<T, E> where E: Debug {
/* ... */
}

隐式要求 E成为一个大小类型。因此,在您的情况下,实现无效且不可用(实际上,Result<T, E> 的大部分(如果不是全部)实现都需要调整 TE 的大小,因此未调整大小的 Result 不是很有用)。

针对您的情况,最简单的解决方法是将您的错误放入 Box 中,像这样:

type MyResult<T> = Result<T, Box<MyError>>;

关于rust - 结果类型未在名为 `unwrap` 的范围内实现方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787271/

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