<現時点でのクロージャについての理解>

>>一般の定義

ここ

>>Perlでの定義

手元の本によると「サブルーチンのブロックの外側で宣言されたレキシカル変数(my宣言によりレキシカルスコープを持った変数)を取り込んだ無名サブルーチンのことをクロージャと呼」ぶそうな。
ついでに「生成された時点のスコープに属していたレキシカル変数の値を保持する性質」も持っているそうな。

>>何を言っているのかわかr

まず、「無名」であることから、リファレンスを張って使用するのが前提になっていることがわかる。
また、「〜〜〜レキシカル変数の値を保持する」ということを例えると、 「クロージャは、定義された瞬間の(自分を包んでいるブロック内のレキシカル変数の)スナップショットを持つ」と解釈できそうだ。 レキシカル変数は「定義されたブロックの外側からは接触できない」変数だけど、「過去のある時点での値」ならば、クロージャ経由でアクセスできる、と考えて良いのかな。

>>安直な使い方案

パラメータの異なるサブルーチンを大量に作りたいときは、 「パラメータを取り、クロージャ(無名サブルーチン)を返す」サブルーチンを作れば良い(テンプレートみたいなもん)。

>>疑問

「スナップショット」された変数をいじれるのは、スナップショットを持っているクロージャだけ?

accend->Perl->labnote->index page