公開技術情報

[English] [Japanese]

10.5. クロージャ

LuneScript はクロージャに対応している。

// @lnsFront: ok
fn func( mut val:int ): form {
   return fn () {
      val = val + 1;
      print( val );
   };
}

let sub1 = func( 10 );
sub1(##); // 11
sub1(##); // 12
sub1(##); // 13
sub1(##); // 14
let sub2 = func( 100 );
sub2(##); // 101
sub2(##); // 102
sub2(##); // 103
sub2(##); // 104

上記の関数 func() は、クロージャを生成して返す関数である。 このクロージャは、 func の引数 val をインクリメントして出力する関数である。

このサンプルでは、func(10), func(100) をコールし、 それぞれで生成されたクロージャを sub1, sub2 セットし、4 回ずつコールしている。 これによって、 11 〜 14, 101 〜 104 が出力される。