クロージャの構文
クロージャは縦棒を使って作成します: |..| ..。
// 著作権 2025 Google LLC // SPDX-License-Identifier: Apache-2.0 fn main() { // 簡潔な構文では、引数と戻り値の型を推論できます: let double_it = |n| n * 2; dbg!(double_it(50)); // あるいは、型を指定し、本体を波かっこで囲んで完全に明示的にできます: let add_1f32 = |x: f32| -> f32 { x + 1.0 }; dbg!(add_1f32(50.)); }
-
引数は
|..|の間に書きます。本体は{ .. }で囲めますが、 単一の式であれば省略できます。 -
引数の型は省略可能で、省略した場合は推論されます。戻り値の型も 省略可能ですが、本体を
{ .. }で囲む場合にのみ書けます。 -
どちらの例も、単なるネストした関数として書くこともできます。これらは レキシカル環境から変数を何もキャプチャしていません。次にキャプチャを 見ていきます。
さらに詳しく
-
関数を変数に格納できるのはクロージャだけではありません。通常の関数も 変数に入れて、クロージャと同じ方法で呼び出せます: playground の例。
- リンク先の例では、何もキャプチャしないクロージャは通常の関数ポインタにも 型強制できることも示しています。