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 が出力される。