我如何使用在检查相同值的循环中可变捕获变量的闭包?

ber*_*red 2 closures rust

fn main() {
    let mut foo = 1;

    let mut func = || foo += 1;
    while foo < 5 {
        func();
    }
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let mut foo = 1;

    let mut func = || foo += 1;
    while foo < 5 {
        func();
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白为什么这不起作用,但我正在寻找一种以某种方式绕过借用检查器的方法。有没有办法在这里使用闭包?除了使用函数之外,还有其他好的选择吗?我遇到了必须更改几个变量的情况。

Jor*_*eña 6

您拥有的一种选择是将可变引用传递给闭包,而不是通过环境捕获隐式借用它:

fn main() {
    let mut foo = 1;

    let func = |foo: &mut i32| *foo += 1;

    while foo < 5 {
       func(&mut foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

操场


归档时间:

查看次数:

392 次

最近记录:

7 年,7 月 前