我已将有问题的代码删除到此示例:
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; })
| ^^^^^^^^^^^^
如果我已经使用了闭包,为什么编译器会告诉我使用闭包?
答案 0 :(得分:4)
这是一个产生相同错误的更短的例子:
fn foo(a: i32) {
const b: i32 = a;
}
问题是const
没有声明局部变量;它声明了一个全局常量(尽管它可以限定为函数或块)。常量意味着始终具有相同的值,因此它们的值不能取决于参数。
如果您想要一个不可变的局部变量,请改用let
。