アップデート
私は実験的なプログラミング言語を設計していますが、問題はクロージャーを含めるか、ファーストクラスの関数を使用するかです。これを決定するには、ファーストクラス関数に対するクロージャーの利点を示す現実的なユースケース/例が必要です。2つのうちの1つを使用せずに達成できるすべてのことを達成できることは知っていますが、コードが読みやすいファーストクラス関数などのユースケースがいくつかあります(例:短い、またはいくつかのクラスに分割されていない) )。例えば:
ルビー:
[1,5,7].map{|x| x*x }
[1,'test',3].select{|x| x.kind_of? Integer}.map{|x| x.to_s }
big_array.each{ |item| puts item }
ファーストクラス関数がなければ、for ループなどを使用する必要があるため、これらの例はより冗長になります。
では、クロージャーの有用性を示すのはどのようなユースケースでしょうか? 私はファーストクラスの関数をたくさん使っていますが、クロージャーの良いユースケースを思いつくことができませんでした. クロージャの良いユースケースはありますか?
元の投稿
クロージャーが値だけでなく変数にバインドする理由がわかりません。
ルビー:
x = 5
l = lambda { x }
l.call #=> 5
x = 100
l.call #=> 100
クロージャーの定義の時点で、変数に格納されている値を参照するだけでなく、変数を参照することの用途は何ですか? この例のように:
ルビー:
x = 5
l = lambda { x }
l.call #=> 5
x = 100
l.call #=> 5, not 100
クロージャーの定義の時点で、それらの変数の値だけでなく、変数を参照する必要がある良いユースケースはありますか?