为什么我不能重用funtion的借用指针

时间:2013-12-08 17:37:36

标签: pointers rust

我不明白为什么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)并使用普通函数而不是闭包,但我怎样才能得到这个使用闭包?

1 个答案:

答案 0 :(得分:1)

事实上,&fn 在正常意义上并非实际上是借用的指针。这是一种封闭类型。在master中,函数类型已经修复了很多,这些东西的语法已经改为|&mut int| - 如果你想要一个函数的借用指针,那么你需要输入它&(fn (...))&fn现在被标记为过时的语法,以帮助人们远离它,因为它是完全不同的类型。)

但是对于闭包,你可以通过引用传递它们:&|&mut int|