Perlのクロージャ
かなり気軽に使える。
↓こんな感じ。
# クロージャを返す関数 sub function { my $scalar = shift; my $closure = sub { my $scalar_c = $_[0] + $scalar; return $scalar_c; }; return $closure; } # クロージャの初期化 $closure1 = function(100); $closure2 = function(200); # クロージャの呼び出し $result1 = $closure1->(10); $result2 = $closure2->(10); print "$result1\n"; #=> 110 print "$result2\n"; #=> 210
初期化した時、functionの中で設定した値(レキシカル変数:$scalar)がずっと保持される。
$closureが一つのオブジェクトのように使える。
このような機能は、関数型言語では、高階関数と呼ばれ、ごく一般的に使われている。
Javaの場合は,このようなシンプルな記述はできないが、無名インナークラスで同様のことはできる。
ただし、さらに他の制約があった気がするが、忘れた。
↓参考(というよりほぼぱくり?)
http://kabocha.org/jelfe/07/21.html