当前位置: 首页 > 知识库问答 >
问题:

如何修复:预期的具体生存期,但找到了绑定生存期参数

楮杰
2023-03-14

我目前正在听这个。我试图把它缩小到一个最小的可重复的例子。

struct Request;

struct ResponseWriter<'a> { 
    dummy: &'a () 
}

#[deriving(Clone)]
pub struct RouteStore{
    pub routes: Vec<Route>,
}

#[deriving(Clone)]
struct Route {
    path: String,
    handler: fn(request: &Request, response: &mut ResponseWriter)
}

impl RouteStore {
    pub fn new () -> RouteStore {
        RouteStore {
            routes: Vec::new()
        }
    }

    fn add_route (&mut self, path: String, handler: fn(request: &Request, response: &mut ResponseWriter)) -> () {
        let route = Route {
            path: path,
            handler: handler
        };
        self.routes.push(route);
    }
}

fn main () {

}

这给我留下了:

error: mismatched types: expected `fn(&http::server::request::Request, &mut http::server::response::ResponseWriter<>)` but found `fn(&http::server::request::Request, &mut http::server::response::ResponseWriter<>)` (expected concrete lifetime, but found bound lifetime parameter )
src/so.rs:12     handler: fn(request: &Request, response: &mut ResponseWriter)
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以前,我将我的fn存储在像这样的HashMap

但是现在我想重构一些东西,并引入了一个Road结构,并将东西存储为Vec

对于好奇的人来说,这是我为Rust编写一个受expressjs启发的web框架Floor的一部分


共有1个答案

楮景明
2023-03-14

在将示例简化一点(去掉http依赖关系)和一些关于IRC的建议(即有人指出,如果您从路由中删除派生(克隆),问题就会消失)之后,您可以看到下面的固定版本(--cfg v2

#[deriving(Clone)]
pub struct RouteStore{
    pub routes: Vec<Route>,
}

#[cfg(v1)]
#[deriving(Clone)]
struct Route {
    path: String,
    handler: fn(response: &mut ())
}

#[cfg(v2)]
struct Route {
    path: String,
    handler: fn(response: &mut ())
}

#[cfg(v2)]
impl Clone for Route {
    fn clone(&self) -> Route {
        Route { path: self.path.clone(), handler: self.handler }
    }
}
impl RouteStore {
    pub fn new () -> RouteStore {
        RouteStore {
            routes: Vec::new()
        }
    }

    fn add_route (&mut self, path: String, handler: fn(response: &mut ())) -> () {
        let route = Route {
            path: path,
            handler: handler
        };
        self.routes.push(route);
    }
}

fn main () {

}

<罢工> 这里的问题是 fn不实现 克隆。 编辑:它确实有一个clone方法,但是返回的值似乎与该字段需要的不兼容。上面的v2版本只是回避了整个问题。(

因此,我怀疑您看到的错误来自自动生成的克隆实现,派生(克隆)注入。

 类似资料:
  • 关于这个主题已经有很多线程,但是我看不出讨论的问题是否适用于我的特定问题。 我有一个存储和函数的结构。简而言之,问题是这样的: 我想做的是存储一个与名称相关联的回调函数(将来可能会有更多内容)。 但当我尝试这样使用这段代码时: 我得到以下错误消息: 我试着像这样内联闭包 但是我又犯了一个错误 我相信我明白为什么我会这样。 在切换到一个函数引用以存储在我的命令结构中之前,我尝试使用一个通用类型参数,

  • 我无法计算出这段代码的生存期参数。我所尝试的一切通常都会导致编译器错误:“预期的绑定生存期参数,找到了具体的生存期”或者类似于“考虑使用所示的显式生存期参数”(所示的示例没有帮助)或“与trait不兼容的方法”。 、和都是简化版本,以尽量减少此示例。 铁锈游乐场

  • 我正在尝试在结构中存储函数: 编译器抱怨:

  • 我试图编写一个函数,使用闭包验证给定的集合。该函数获取集合的所有权,对内容进行迭代,如果没有找到无效的项,则返回集合的所有权。这就是为什么它可以这样使用(而不需要为创建一个temp):

  • 问题内容: 如何在PHP中设置会话生存期?我希望将其设置为永久,只要该请求存在。该请求是AJAX。我处理AJAX请求的PHP代码是: 和JavaScript: 该会话始终在300秒后重置。 问题答案: PHP上的会话与Cookie类型的会话一起使用,而在服务器端,会话信息会不断删除。 要在php中设置时间,可以在session_start之前使用session_set_cookie_params

  • 请考虑这个简化的C++14程序: 两个编译器在这里的行为都是正确的还是其中一个是错误的?