私は大文字と小文字を区別しないアナグラムファインダを書いています。私は次のコードを持っています:Rustのクロージャの範囲外の変数をキャプチャするにはどうすればよいですか?
この論理は、指定された小文字のソートを行い、ベクトル内の各単語について同じことを行います。単語が異なるプレ・ソート(自己アナグラムを除く)で、同じポスト・ソートの場合は、出力に追加します。 [Iこのエラータイプ(の説明を見たとき
error: type mismatch: the type
[[email protected]/lib.rs:23:25: 32:6 s_sorted:_, s:_]
implements the traitfor<'r> core::ops::FnMut<(&'r str,)>
, but the traitcore::ops::FnMut<(&&str,)>
is required (expected &-ptr, found str)
:
上記の問題私はコンパイルするとき、私は次のエラーを取得するため、しかし、周囲の範囲からs
とs_sorted
をキャプチャを有すると思われますE0281])、私は、次のTLを発見; DR:
The issue in this case is that
foo
is defined as accepting aFn
with no arguments, but the closure we attempted to pass to it requires one argument.
Iが周囲範囲からmove closures capture variablesを考えこれは紛らわしいです。
私には何が欠けていますか?
のクローンを作成することです。移動クロージャーを使用し続けるか、(クロージャー・パラメーターのタイプを変更してイテレーターをクローンする)他のアンサーを使用する方が良いと思いますか? – erip
イテレータを複製するよりも@erip * * - それは複製されるイテレータ全体ではありません。それは生成されるごとに各要素を複製する追加のアダプタです。私の希望と直感は、2つのソリューションが同等に機能しているということです。 **私はこの解決法がこの場合より慣用的であると信じている。とにかく 'move'クロージャは必要ありません(私は更新しました)。 – Shepmaster
ヒントをありがとう。非常に有用で包括的。 – erip