一つにまとめておくことがコードの明確さや再利用に役立つ場合が有ります。自由変数は外部のスコープから来て、関数中で使われるときに「閉じ込め」られます。Rustはこれから見ていくようにクロージャの非常に良い実装を提供しています。作成し、クロージャを代入しています。定義される関数との間の違いに気がつくことでしょう。一つ目はクロージャの引数や返り値の型を示す必要が無いことです。plus_one(1));しかし、このように型を示す必要はありません。?一言で言えば、これは使いやすさのためです。名前付きの関数が引き起こすと思われるような定義から離れた箇所で発生するエラーの要因ともならないためです。通常の関数との違いの二つ目は、構文が大部分は似ていますがほんの少しだけ違うという点です。;小さな違いは有りますが殆どの部分は同じです。クロージャとクロージャの環境クロージャの環境は引数やローカルな束縛に加えてクロージャを囲んでいるスコープ中の束縛を含むことができます。束縛を借用しています。この束縛と衝突する処理を行うとエラーが発生します。変更可能な借用を取得することはできません。要求した場合、Rustは借用する代わりに環境の所有権を取りムーブします。所有権を取ることになります。所有権を取る関数に渡した場合と同じです。キーワードを用いることで、クロージャに環境の所有権を取得することを強制することができます。いうキーワードにもかかわらず、変数は通常のmoveのセマンティクスに従います。コピーの所有権を取得します。して宣言する必要があります。コピーの所有権を取得します。クロージャは独自のスタックフレームを持っているという点です。ないクロージャはクロージャを作成したスタックフレームと紐付いています。ないクロージャを関数から返すことはできないということを意味しています。クロージャを引数や返り値にすることについて説明する間に、クロージャの実装についてもう少し説明する必要があります。それはクロージャも例外ではありません。クロージャの実装Rustにおけるクロージャの実装は他の言語とは少し異なります。Rustにおけるクロージャは実質的にトレイトへの糖衣構文です。ついてのセクションを読みたくなるでしょう。続きを説明いたします。オーバーロード可能な演算子です。この事実から残りの全てを正しく理解することができます。Rustでは、トレイトを演算子のオーバーロードに利用します。それは関数の呼び出しも例外ではありません。すべての種類をカバーしています。各種類を一つの大きなトレイトにまとめるのではなく異なるトレイトに分けています。このようにすることで、どのような種類のクロージャを取るのかについて多くをコントロールすることができます。上述の3つのトレイトへの糖衣構文です。し、それを利用します。通常のトレイトと全く同様に行うのです!これは、静的ディスパッチと動的ディスパッチを選択することができるということも意味しています。