Rust 结果类型未在名为“展开”的范围中实现方法`

Rust 结果类型未在名为“展开”的范围中实现方法`,rust,Rust,出于某种原因,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 {

出于某种原因,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()
    }
}
使用std::fmt::{Display,Debug};
使用std::error::error;
trait MyError:错误+显示+调试{}
类型MyResult=Result;
性状Foo:Clone{}
性状我的性状{
fn my_函数(&self)->MyResult;
fn展开函数(&self)->T{
self.my_函数().unwrap()
}
}

定义类型时

type MyResult<T> = Result<T, MyError>;
它隐式地要求
E
为大小类型。因此,在您的情况下,虽然不是这样,但实现是无效和不可用的(实际上,
Result
的大部分(如果不是全部的话)实现都需要调整
T
E
的大小,因此未调整大小的
结果
不是很有用)

在您的情况下,最简单的修复方法是将错误放入
框中,如下所示:

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