这是代码:
错误信息为:
fn test(){
let mut numbers = vec![2];
let f = || {
for _ in numbers.iter(){
}
false
};
while false {
let res = f();
if res {
numbers.push(10);
}
}
}
错误信息为:
|
15 | let f = || {
| -- immutable borrow occurs here
16 | for _ in numbers.iter(){
| ------- first borrow occurs due to use of `numbers` in closure
...
22 | let res = f();
| - immutable borrow later used here
23 | if res {
24 | numbers.push(10);
| ^^^^^^^^^^^^^^^^ mutable borrow occurs here
但是如果我将while
关键字更改为if
,就可以编译。怎么解决这个问题?我想在循环中调用匿名函数。
numbers
的不可变引用的结构体。 我不确定环境是否可以在每次调用闭包时自动传递给它。 不确定在所有情况下都是正确的。 可能值得提出一个适当的SO问题。 - Lukas Kalbertodt