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