Rust 为什么我的结果类型别名不满足failure::Fail trait绑定?

Rust 为什么我的结果类型别名不满足failure::Fail trait绑定?,rust,traits,lifetime,Rust,Traits,Lifetime,我正在尝试实现事件挂钩,正如所演示的,同时也使用失败板条箱的模式 这是我的代码的精简版本: #[macro_use] extern crate failure; use failure::{Backtrace, Context, Error, Fail}; use std::fmt; #[derive(Debug)] pub struct PortalError { inner: Context<PortalErrorKind>, } impl Fail for Por

我正在尝试实现事件挂钩,正如所演示的,同时也使用失败板条箱的模式

这是我的代码的精简版本:

#[macro_use]
extern crate failure;

use failure::{Backtrace, Context, Error, Fail};
use std::fmt;

#[derive(Debug)]
pub struct PortalError {
    inner: Context<PortalErrorKind>,
}

impl Fail for PortalError {
    fn cause(&self) -> Option<&Fail> {
        self.inner.cause()
    }

    fn backtrace(&self) -> Option<&Backtrace> {
        self.inner.backtrace()
    }
}

impl fmt::Display for PortalError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        fmt::Display::fmt(&self.inner, f)
    }
}

#[derive(Copy, Clone, PartialEq, Debug, Fail)]
pub enum PortalErrorKind {
    #[fail(display = "Unknown Error")]
    Unknown,
}

//----------------------------------------------------------

pub type PortalResult<T> = Result<PortalError, T>;
pub trait Portal {
    fn get_something(&self) -> PortalResult<Vec<u32>>;
}

//----------------------------------------------------------

pub trait FeedApi<'a> {
    type T: FeedApi<'a>;

    fn new<P: Portal + 'a>(portal: P) -> Result<Self::T, Error>;
}

//----------------------------------------------------------

pub struct Feedly<'a> {
    portal: Box<Portal + 'a>,
}

impl<'a> FeedApi<'a> for Feedly<'a> {
    type T = Feedly<'a>;

    fn new<P: Portal + 'a>(portal: P) -> Result<Self::T, Error> {
        Ok(Feedly {
            portal: Box::new(portal),
        })
    }
}

impl<'a> Feedly<'a> {
    pub fn demo_function(&self) -> Result<(), Error> {
        let _ = self.portal.get_something().context(PortalErrorKind::Unknown)?;
        Ok(())
    }
}

fn main() {
    println!("Hello, world!");
}
在“Feedly”方法中,我想使用门户:

self.portal.get_something().context(PortalErrorKind::Unknown)?
但我得到了以下错误:

error[E0599]:在当前作用域中找不到类型为`std::result::result`的名为`context`的方法
-->src/main.rs:67:45
|
67 | let=self.portal.get_something().context(PortalErrorKind::Unknown)?;
|                                             ^^^^^^^
|
=注意:方法“context”存在,但未满足以下特征边界:
`标准::结果::结果:失败::失败`
`&标准::结果::结果:失败::失败`
`&mut std::结果::结果:失败::失败`
查看文档时,
failure::Fail
特征有一个绑定的
“static
”。方法
context
有一个绑定
Self:Sized

我不确定哪种特质在这里不被满足。装箱的
门户
既不是
大小
也不是
静态
,但返回的结果应该是,对吗

这是我第一次在锈迹斑斑的环境中处理箱子


哦,孩子。你说得对。我不认为错误就这么简单。编译器将我引向一个完全不同的方向。谢谢你,很抱歉吵闹。希望至少其他人能从我愚蠢的错误中吸取教训:DOh boy。你说得对。我不认为错误就这么简单。编译器将我引向一个完全不同的方向。谢谢你,很抱歉吵闹。希望至少其他人能从我愚蠢的错误中吸取教训:D
self.portal.get_something().context(PortalErrorKind::Unknown)?
pub type PortalResult<T> = Result<PortalError, T>;
pub type PortalResult<T> = Result<T, PortalError>;