【发布时间】:2015-03-29 05:12:21
【问题描述】:
编辑:
我正在尝试在函数内创建一个闭包向量,向该向量添加一个标准闭包,然后从该函数返回该向量。我收到关于生命周期冲突的错误。
代码可以执行here。
fn vec_with_closure<'a, T>(f: Box<FnMut(T) + 'a>) -> Vec<Box<FnMut(T) + 'a>>
{
let mut v = Vec::<Box<FnMut(T)>>::new();
v.push(Box::new(|&mut: t: T| {
f(t);
}));
v
}
fn main() {
let v = vec_with_closure(Box::new(|t: usize| {
println!("{}", t);
}));
for c in v.iter_mut() {
c(10);
}
}
编辑 2:
将Rc<RefCell<...>> 与move || 和Fn() 特征一起使用,而不是Shepmaster 建议的FnMut()m,帮助我生成了上述代码的工作版本。 Rust 游戏笔版本here.
【问题讨论】:
-
我强烈建议您创建一个MCVE 来帮助我们更好地帮助您。我的猜测是,您可以删除许多结构的方法并仍然重现相同的问题。
-
我会尝试找出一个更短的版本。谢谢。
-
虽然有些粗略的戳戳似乎表明我可能是错的;-)。我认为您可以删除
T和'a(将其替换为'static)以使其更小。 -
不会将其静态推送到全局范围吗?我不确定我是否已经完全理解了那一世。我想,需要阅读。 ;)