[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
2022-04-24 03:19:18
質問
とは何ですか?
特定条件
を実装するためのクロージャです。
Fn
,
FnMut
と
FnOnce
の特徴を教えてください。
ということです。
-
クロージャはいつ
ではなく
を実装しています。
FnOnce
トライット? -
クロージャはいつ
ではなく
を実装しています。
FnMut
トライット? -
クロージャはいつ
ではなく
を実装しています。
Fn
トライット?
例えば、クロージャの状態を本体で変異させると、コンパイラは
Fn
を追加しました。
解決方法は?
各特性は、クロージャ/関数に関するより多くの制限的なプロパティを表し、そのシグネチャは
call_...
メソッド、特に
self
:
-
FnOnce
(self
は一度だけ呼び出すことができる関数 -
FnMut
(&mut self
) があれば呼び出すことができる関数です。&mut
環境にアクセスできる -
Fn
(&self
を持つだけなら呼び出すことができる関数です。&
環境にアクセスできる
クロージャ
|...| ...
は、できる限り多くのものを自動的に実装します。
-
すべてのクロージャは
FnOnce
一度も呼び出されないクロージャは、その名前に値しない。もし、クロージャがFnOnce
一度だけ呼び出すことができます。 -
キャプチャから移動しないクロージャは、以下の機能を実装しています。
FnMut
関数オブジェクトに非エイリアスなアクセスがある場合)複数回呼び出すことができます。 -
キャプチャへのユニーク/ミュータブルアクセスを必要としないクロージャは、以下の機能を実装しています。
Fn
そのため、基本的にどこでも呼び出すことができます。
これらの制限は、直接的に
self
で説明したように、クロージャを構造体に変換しています。
Rustでクロージャを見つける
.
クロージャについては クロージャ。環境を捕捉することができる匿名関数 で Rust プログラミング言語 .
関連
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] PHPでは、クロージャとは何ですか?なぜ "use "識別子を使用するのですか?
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】JavaScriptのクロージャと無名関数の比較
-
[解決済み】iterとinto_iterの違いは何ですか?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
-
[解決済み] カスタムステップで範囲を反復処理するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rustにはキューとスタックコレクションがありますか?
-
[解決済み] usize` と `u32` の違いは何ですか?
-
[解決済み] 文字列を追加して印刷するにはどうすればよいですか?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] Cargoで複数のバイナリをビルドするにはどうしたらいいですか?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
-
[解決済み] カスタムステップで範囲を反復処理するには?
-
[解決済み] アポストロフィが1つ付いているラストタイプは何ですか?