Rust 预期绑定寿命参数,找到具体寿命

Rust 预期绑定寿命参数,找到具体寿命,rust,Rust,我无法计算出这段代码的生命周期参数。我尝试的所有操作通常都会导致编译器错误:“预期绑定生存期参数'a,找到具体的生存期”或类似“考虑使用所示的显式生存期参数”(所示示例没有帮助)或“与trait不兼容的方法” 请求、响应和操作都是简化版本,以尽量减少此示例 struct Request { data: String, } struct Response<'a> { data: &'a str, } pub enum Action<'a> {

我无法计算出这段代码的生命周期参数。我尝试的所有操作通常都会导致编译器错误:“预期绑定生存期参数
'a
,找到具体的生存期”或类似“考虑使用所示的显式生存期参数”(所示示例没有帮助)或“与trait不兼容的方法”

请求
响应
操作
都是简化版本,以尽量减少此示例

struct Request {
    data: String,
}
struct Response<'a> {
    data: &'a str,
}

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

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

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

fn main() {
    println!("running");
}
struct请求{
数据:字符串,
}
结构响应),
完成,
}
发布特性处理程序:发送+同步{
fn handle)->T的操作处理程序
哪里
T:Send+Sync+Fn(请求、响应、,
{
fn句柄(&self),请求:请求,回复:响应{
(*自我)(要求、回复)
}
}
fn main(){
println!(“运行”);
}

您的特质功能定义如下:

fn handle<'a>(&self, req: Request, res: Response<'a>) -> Action<'a>;
fn handle(&self, req: Request, res: Response<'a>) -> Action<'a>;
'a
在这里不是由调用方指定的,而是与您为其实现trait的类型相关联。因此trait实现与trait定义不匹配

以下是您需要的:

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

impl<T> Handler for T
where
    T: Send + Sync + for<'a> Fn(Request, Response<'a>) -> Action<'a>,
{
    fn handle<'a>(&self, req: Request, res: Response<'a>) -> Action<'a> {
        (*self)(req, res)
    }
}
trait处理程序:发送+同步{
fn句柄)->操作fn(请求、响应、,
{

fn handle)->操作fn(请求,响应
。这意味着:“给定任意生存期参数
'a
T
必须满足
fn(请求,响应
;或者,“
T
必须满足
fn(请求,响应

forOh,RFC指出括号符号无论如何都会省略所有内容:。是的,for几乎是我最后一件没有记录的事情。