哪些具体条件为闭合来实现Fn,FnMut和FnOnce特质?
那是:
FnOnce特性?FnMut特性?Fn特性?例如,改变它的主体上的闭包状态会使编译器无法实现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)
我该如何纠正?
为什么我需要使这个闭包变量可变?闭包不返回任何内容,因此闭包变量中没有存储任何内容。这个闭包只是从环境中捕获一个值并递增它。
fn main() {
let mut x = 1;
let mut y = || x = x + 1;
y();
println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)