Rust 无法推断适当的生存期

Rust 无法推断适当的生存期,rust,lifetime,Rust,Lifetime,我在锈迹斑斑的生活中仍然存在问题。我想使用一个闭包来实现返回引用的trait,但我不知道如何让编译器满意 这是一种扩展 我开始工作了,但现在当我给程序添加闭包时,它就不会编译了 我认为我的问题的一部分是我不太理解在impl块中声明生存期和在where子句中使用for之间的区别 如果我能用or让它工作,我会很高兴,但我也想知道它们之间的区别 编辑:最后两个链接指向一个生锈的操场,代码我无法编译。第一个链接如下所示: pub struct Response<'a>{ data:

我在锈迹斑斑的生活中仍然存在问题。我想使用一个闭包来实现返回引用的trait,但我不知道如何让编译器满意

这是一种扩展 我开始工作了,但现在当我给程序添加闭包时,它就不会编译了

我认为我的问题的一部分是我不太理解在impl块中声明生存期和在where子句中使用for之间的区别

如果我能用or让它工作,我会很高兴,但我也想知道它们之间的区别

编辑:最后两个链接指向一个生锈的操场,代码我无法编译。第一个链接如下所示:

pub struct Response<'a>{
    data: &'a str
}

pub enum Action<'a>{
    Next(Response<'a>),
    Done
}

pub trait Handler<'a>: Send + Sync{
    fn handle(&self, res: Response<'a>) -> Action<'a>;
}

impl<'a, T> Handler<'a> for T
where T: Send + Sync + Fn(Response<'a>) -> Action<'a> {
    fn handle(&self, res: Response<'a>) -> Action<'a>{
        (*self)(res)
    }
}

fn main(){
    println!("running");
    do_something_with_handler(|res: Response| -> Action{
        //this closure should implement Handler

        //Action::Done //This compiles if Done is returned instead of Next
        Action::Next(res)
    });
}

pub fn do_something_with_handler<'a, T>(handler: T) where T: Handler<'a> + 'static{
    //do something here
}

// This isn't used in this example, but I want to make sure the trait
// can still be implemented for arbitrary types
struct SomethingElse;

impl<'a> Handler<'a> for SomethingElse{
    fn handle(&self, res: Response<'a>) -> Action<'a>{
        Action::Next(res)
    }
}

问题的本质是:,。这有点含糊不清,你能发布不起作用的代码吗?@MatthieuM。不起作用的代码位于一个生锈的操场的链接中,但我编辑了这个问题以使其更有效obvious@NathanFuchs:谢谢,一般情况下,SO支持打开内容,因为链接会过时,尤其是缩小的URL,它们的过期日期很短。有趣的是,从第二个示例中删除一些类型批注可以使其正常工作: