!!!クロージャ(Closure) http://martinfowler.com/bliki/Closure.html クロージャとは、関数に、引数として渡せるコードブロック。 EmployeeからManagerを抜き出すには、C#(クロージャを持たない)では、以下のようにするだろう public static IList Managers(IList emps) { IList result = new ArrayList(); foreach(Employee e in emps) if (e.IsManager) result.Add(e); return result; } クロージャを持つ、Rubyなら以下のようにする。 def managers(emps) return emps.select {|e| e.isManager} end Cでの関数ポインタ、Javaでの無名クラス、C#でのデリゲートで、同じようなことができるが、違いがある。 1つは、定義された時点での変数が参照できること。 以下の例では、ローカル変数を参照している。 def highPaid(emps) threshold = 150 return emps.select {|e| e.salary > threshold} end また、以下の関数は、引数に依存した振る舞いをするクロージャを返している。 def paidMore(amount) return Proc.new {|e| e.salary > amount} end *[JavaScriptでの例|http://nonn-et-twk.net/twk/closure/] *SJC-P インナークラス