プログラミング言語では、クロージャは人気があり、しばしば望まれる機能です。ウィキペディアによると(強調鉱山):
コンピューターサイエンスでは、クロージャー(...)は、その関数の非ローカル変数の参照環境と一緒の関数です。クロージャを使用すると、関数は直接のレキシカルスコープ外の変数にアクセスできます。
そのため、クロージャーは本質的に(匿名?)関数値であり、それ自身のスコープ外の変数を使用できます。私の経験では、これは、定義ポイントでスコープ内にある変数にアクセスできることを意味します。
ただし、実際には、少なくとも関数型プログラミング以外では、概念は異なるようです。異なる言語は異なるセマンティクスを実装しており、意見の対立さえあるようです。多くのプログラマーは、クロージャーが何であるかを知らないようで、それらを匿名関数にすぎないと見なしています。
また、クロージャを実装するときに大きなハードルが存在するようです。最も注目すべきは、Java 7にはそれらが含まれているはずでしたが、この機能は将来のリリースにプッシュバックされたことです。
閉鎖がなぜ理解するのが難しいのか、理解するのが難しいのはなぜですか?これはあまりにも広範で曖昧な質問なので、これらの相互接続された質問にさらに焦点を当てましょう。
- 一般的なセマンティック形式(小さなステップ、大きなステップなど)でクロージャを表現する際に問題はありますか?
- 既存の型システムは閉鎖に適しておらず、簡単に拡張できませんか?
- クロージャを従来のスタックベースのプロシージャ変換に合わせるのは問題ですか?
質問は主に手続き型、オブジェクト指向、およびスクリプト言語全般に関連していることに注意してください。私の知る限り、関数型言語には問題はありません。