我目前正在尝试使用iron框架 . 我正在使用他们的中间件router . 我现在的问题是我有一个名为 default_data
的变量,我想默认使用它 . 从早期的研究中,我知道我必须在我的闭包中使用 move
关键字 . 然而,这会导致我的 default_data
变量出现问题,在第一个变量添加到路由器后,该变量无法用于任何其他闭包 .
这大致是我的代码部分的样子:
let mut router = Router::new();
let default_data = std::collections::BTreeMap::<String, String>::new();
default_data.insert("test".to_string(), "data".to_string());
router.get("/", move |_| {
let mut new_data = default_data.clone();
new_data.insert("test2".to_string(), "some other data".to_string());
Ok(Response::with((status::Ok, new_data.get("test2".to_string()).unwrap())))
}
router.get("/test", move |_| {
let mut new_data = default_data.clone();
new_data.insert("test2".to_string(), "some other data again".to_string());
Ok(Response::with((status::Ok, new_data.get("test".to_string()).unwrap())))
}
我得到的错误是 E0382
,_ capture of moved value: 'some_data'
. 我有点知道这个问题,但我真的不知道如何解决这个问题 . 我仍然很生锈 .
1 回答
看起来你可以在将它发送到每个线程之前克隆这个
default_data
,对吗?然后你只需要在闭包之外克隆它: