このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

クロージャ、それなに?

しばしば「クロージャ」って言葉を見かけますが、皆さん、どんな意味で使っているんだろう?

単に無名関数(ラムダ式)をクロージャと呼んでいるのかな? それとも、無名関数とそこに出現する(ローカルでない)変数の束縛(環境と呼ぶんだったかな)を一緒にしたもの?

後者の意味だとして、たまたま変数束縛が空なら単なる無名関数になるから、気にする必要もないようなもんだが、束縛されてない非ローカル変数が残っていてもクロージャなのかな?

function makeAffineLinear(a) {
 return function(x) {
  return a*x + b;
 }
}

makeAffineLinearで返される関数は、aを固定しても大域的bで挙動が変わってしまうのだけど、そういうのもクロージャなの? たしか、クロージャ(closure)の語源は「自由変数が全て閉じている(束縛されている)」って、そんなことではないのだったと記憶しているのだけど、それにも関わらず、全部閉じてないとクロージャじゃない気がする。いやっ、気がするだけで正確なことは知りません。クロージャのほんとの語源も忘れた。

[追記]と、これを書いてから気が付いたのだけど、「クロージャ」って“はてなキーワード”だったのね。たどって読んでみたら、上のbのような実行時の外部環境に影響されるのはクロージャじゃないように読める。[/追記]