无法捕获fn项中的动态环境,但代码已经在||中{}关闭

时间:2017-12-10 05:10:05

标签: rust

我已将有问题的代码删除到此示例:

fn foo(input_vector: Vec<()>) {
    const bar: Option<()> = []
        .iter()
        .map(|_| { input_vector; })
        .nth(0);
}

fn main() {
    foo(vec![]);
}

产生以下错误:

error[E0434]: can't capture dynamic environment in a fn item; use the || { ... } closure form instead
--> src/main.rs:4:20
  |
4 |         .map(|_| { input_vector; })
  |                    ^^^^^^^^^^^^

如果我已经使用了闭包,为什么编译器会告诉我使用闭包?

1 个答案:

答案 0 :(得分:4)

这是一个产生相同错误的更短的例子:

fn foo(a: i32) {
    const b: i32 = a;
}

问题是const没有声明局部变量;它声明了一个全局常量(尽管它可以限定为函数或块)。常量意味着始终具有相同的值,因此它们的值不能取决于参数。

如果您想要一个不可变的局部变量,请改用let