我已将有问题的代码精简为以下示例:
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)
如果我已经使用了闭包,为什么编译器告诉我使用闭包?
这是一个更短的示例,它会产生相同的错误:
fn foo(a: i32) {
const b: i32 = a;
}
Run Code Online (Sandbox Code Playgroud)
问题是const没有声明局部变量;它声明了一个全局常量(尽管它的作用域可以是函数或块)。常量意味着始终具有相同的值,因此它们的值不能依赖于参数。
如果您想要一个不可变的局部变量,请改用let。