在尝试回答Rust array of functions时(我的回答很好),我创造了以下代码:
fn main() {
let mut a : Vec<proc() -> uint>;
for i in range(0u, 11) {
a[i] = proc(){i};
}
println!("{} {} {}", a[1](), a[5](), a[9]());
}
请忽略proc
被弃用的事实,我只是想到应该使用的是代替闭包(我当时不知道move
和未装箱的闭包)
但是,由于以下原因,我无法调用向量的元素:
<anon>:6:26: 6:30 error: cannot move out of dereference (dereference is implicit, due to indexing)
<anon>:6 println!("{} {} {}", a[1](), a[5](), a[9]());
这个错误意味着什么?它不应该只返回uint
吗?
答案 0 :(得分:3)
proc()
是只能使用一次的闭包,因此调用它们消耗它们。
在你的情况下,这意味着将闭包移出Vec<>
以便使用它,这是不可能的,因为索引是对&
指针的解除引用,它只允许不可变访问