- 36 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 00:59:44 ]
- >>33
> delegate { Console.Write ("{0} ", i); }; > ってのは、ループカウンタ i の値をクロージャというもんのコンストラクタに渡したような > もんであり、 i という変数を渡したわけじゃないんじゃないか? レキシカルクロージャと言った場合、一般的には、まさにiという変数 そのものを渡すようなものを指す。もっと知りたい場合は、Schemeや Rubyなどの、クロージャを持っている他の言語について調べてみると 良いと思う。 ちなみにこのような仕様になっていることによって、どんなメリットがある かというと、例えば、次のような「制御構造」を抽象化したライブラリを 作れるという点が挙げられる。JavaやCなどの言語では、制御構造は あくまで組み込みのものだけど、クロージャがある言語では、新しい 制御構造を提供するライブラリを簡単に作ることができる。 int sum = 0; list.each(delegate(int i){ sum += i; }); Console.WriteLine(sum);// listの要素の合計を出力
|

|