クローズの状態にはいくつかのデータがありますが、どのように変更可能にするのですか?たとえば、毎回インクリメントされた値を返すカウンタクロージャが必要ですが、機能しません。私はそれをどのように機能させるのですか?可変状態をクロージャに移動するにはどうすればよいですか?
fn counter() -> Box<Fn() -> i32> {
let mut c: i32 = 0;
Box::new(move || {
c += 1;
c
})
}
fn main() {
let mut a = counter();
let mut b = counter();
println!("{:?}", [a(), a(), a(), b(), b(), a()]);
}
エラー(警告)私は取得しています:
error: cannot assign to captured outer variable in an `Fn` closure
c += 1;
^~~~~~
help: consider changing this closure to take self by mutable reference
Box::new(move || {
c += 1;
c
})
は私が[1, 2, 3, 1, 2, 4]
のような出力に何かにそれを期待しています。
ありがとうございました!私を混乱させるのは、そのパブの特徴Fn:FnMut 'です。 'Fn'(私が使ったもの)が' FnMut'の振る舞いをサポートするべきではないのでしょうか? –
Shchvova
@Shchvovaが更新されました。 – Shepmaster