我目前正在听这个。我试图把它缩小到一个最小的可重复的例子。
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的一部分
在将示例简化一点(去掉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程序: 两个编译器在这里的行为都是正确的还是其中一个是错误的?