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

stu*_*ffy 6 rust

我已将有问题的代码精简为以下示例:

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

fn main() {
    foo(vec![]);
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

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

fn main() {
    foo(vec![]);
}
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*gné 5

这是一个更短的示例,它会产生相同的错误:

fn foo(a: i32) {
    const b: i32 = a;
}
Run Code Online (Sandbox Code Playgroud)

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

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