我不明白为什么rustc在编译时会给我这个错误error: use of moved value: 'f'
,代码如下:
fn inner(f: &fn(&mut int)) {
let mut a = ~1;
f(a);
}
fn borrow(b: &mut int, f: &fn(&mut int)) {
f(b);
f(b); // can reuse borrowed variable
inner(f); // shouldn't f be borrowed?
// Why can't I reuse the borrowed reference to a function?
// ** error: use of moved value: `f` **
//f(b);
}
fn main() {
let mut a = ~1;
print!("{}", (*a));
borrow(a, |x: &mut int| *x+=1);
print!("{}", (*a));
}
我希望在将其作为参数传递给另一个函数后重用该闭包。我不确定它是可复制的还是堆栈闭包,有没有办法告诉?
该片段是针对rustc 0.8的。我设法用最新的rustc(master:g67aca9c)编译不同版本的代码,将&fn(&mut int)
更改为普通fn(&mut int)
并使用普通函数而不是闭包,但我怎样才能得到这个使用闭包?
答案 0 :(得分:1)
事实上,&fn
在正常意义上并非实际上是借用的指针。这是一种封闭类型。在master中,函数类型已经修复了很多,这些东西的语法已经改为|&mut int|
- 如果你想要一个函数的借用指针,那么你需要输入它&(fn (...))
(&fn
现在被标记为过时的语法,以帮助人们远离它,因为它是完全不同的类型。)
但是对于闭包,你可以通过引用传递它们:&|&mut int|
。