コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

ノート:クロージャ

ページのコンテンツが他言語でサポートされていません。

「クロージャ」の語源としては、数学における「閉包」が最初のものと思われるので、それを書くべきと思われます。

クロージャは無名関数のこと?

[編集]

クロージャの用途の記述で,「クロージャ」を単なる「無名関数」,「関数オブジェクト」の意味で使っているように読めるのですが,これらの用途は必ずしもクロージャしている必要はないので,用途としては的を射ていない気がします。用途は必要だと思うので,もっといい例はないでしょうか--Oakw 2008年1月4日 (金) 19:37 (UTC)[返信]

ライブラリの設計者はクロージャを関数への引数として渡すことで利用者が挙動をカスタマイズ可能なようにできる。

  • 関数への引数として渡すことは,C言語でも関数ポインタで行われていたように,クロージャとは関係ない。

クロージャは遅延評価される(呼び出されるまで何も実行しない)ので、制御構造の定義に用いることができる。

  • これもクロージャと考える必要性がない。制御構造としての関数オブジェクトは作られた時点で即使われ,終わったら捨てられる。変数の値を保存することはない。
クロージャの静的スコープであるという特徴は制御構造を実装する上で重要だと思うのですが。 --fryed-peach 2008年1月24日 (木) 02:58 (UTC)[返信]
ご指摘ありがとうございます。
本文の説明に「クロージャ (Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。」とあります。
前半の「実行時の環境ではなく」というところを満たしているか疑問です。通常,制御構造は実行時の環境の中にあり,あるスコープ内ではそれを囲うスコープにアクセスできるのは特殊なことではありません。関数を定義した環境は終わっているのに変数を「囲い込んでいる」クロージャの特徴を示すよい例とは言えないように思います。例えば,C言語のブロック{}外の変数へのアクセスをクロージャとは呼ばないでしょう。
とくに「間違っている」と主張するわけではないですが,より「囲い込んでいる」例を求めます。 --Oakw 2008年1月30日 (水) 11:29 (UTC)[返信]