クロージャの構文

クロージャは縦棒を使って作成します: |..| ..

// 著作権 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 の例

    • リンク先の例では、何もキャプチャしないクロージャは通常の関数ポインタにも 型強制できることも示しています。