小编Daj*_*avu的帖子

无法移出Fn闭包中捕获的外部变量

fn make_adder(x: String) -> Box<Fn() -> String> {
    Box::new(|| x)
}

fn main() {
    make_adder(String::from("a"));
}
Run Code Online (Sandbox Code Playgroud)

这导致此错误:

fn make_adder(x: String) -> Box<Fn() -> String> {
    Box::new(|| x)
}

fn main() {
    make_adder(String::from("a"));
}
Run Code Online (Sandbox Code Playgroud)

我该如何纠正?

rust

9
推荐指数
1
解决办法
1193
查看次数

什么时候应该将mut添加到闭包中?

fn main() {
    let mut a = String::from("a");
    let closure = || {
        a.push_str("b");
    };

    closure();
}
Run Code Online (Sandbox Code Playgroud)

这不会编译:

error[E0596]: cannot borrow immutable local variable `closure` as mutable
 --> src/main.rs:7:5
  |
3 |     let closure = || {
  |         ------- consider changing this to `mut closure`
...
7 |     closure();
  |     ^^^^^^^ cannot borrow mutably
Run Code Online (Sandbox Code Playgroud)

如果我a在闭包中返回而不添加mut,则可以编译:

fn main() {
    let mut a = String::from("a");
    let closure = || {
        a.push_str("b");
        a
    };

    closure();
}
Run Code Online (Sandbox Code Playgroud)

这让我很困惑.似乎在我打电话的时候closure(), …

rust

8
推荐指数
1
解决办法
571
查看次数

标签 统计

rust ×2