2011-10-25 9 views
0

私は閉鎖の定義においてあいまいさを検出すると信じています。具体的には、外部スコープをグローバルスコープにできるように見えます。でWikipediaの記事から例えばクロージャーの定義はもっと厳しくしてはいけませんか?

http://en.wikipedia.org/wiki/Closure_(computer_science

「クロージャ(また字句クロージャ、関数クロージャまたは関数値)は、その関数の非ローカル変数の参照環境と共に機能です。 "

特に非ローカルにはグローバル変数が含まれる可能性があります。 http://en.wikipedia.org/wiki/Non-local_variableの非局所変数に関する記事でさえ、「この用語はグローバル変数を参照できる」と述べている。グローバルは通常意図されているものではないことを述べることによって、問題を修飾する。

しかし、グローバル変数を非ローカル変数として特に除外するには、クロージャの定義にもっと厳格にする必要があるかもしれません。あるいは、この文脈でグローバルが有効な場合がありますか?

EDIT:

受信コメントや追加の考えに基づいて、私にはグローバルを無視して、クロージャの現在の定義一つの特定の事情があると思われ、足りません。そして、それは、そうでない場合はクロージャとしての資格可能性がある場合、コード/機能であり、また、グローバル変数IMO

+0

質問を正しく理解すると、クロージャがグローバル変数を参照できないことを意味しています。本当じゃない。 –

+0

正式には、クロージャーにはグローバルが含まれますが、クロージャーがなくてもグローバルにアクセスできるため、余分な作業は不要です。クロージャー関連の問題については、無視する傾向があります。 –

+0

こんにちはマット、はい、それは私が分かりようにしようとしている:それが受け入れられるかどうか、クロージャからグローバル変数を参照するかどうか。あるいは、もっと正確には、可能な外部スコープがグローバルスコープである場合、実際にクロージャを作成するのか、グローバルにアクセスできる関数だけなのでしょうか?そういうこと - 自分の質問が十分正確ではないと思いますか? –

答えて

0

あるのみ参照非ローカル変数をすることができます、はい、上記のコメントを参照してください。アプリケーション開発者にとっては問題ではありませんが、コンパイラ/インタプリタ開発者にとっては重要です。あなたが最初にそれを認識することができれば、何かを離れて最適化する意味はありません。

関連する問題