さて、Pythonではこれを行うことができます:
def foo(monkeys):
def bar(monkey):
#process and return new monkey
processed_monkeys = list()
for monkey in monkeys:
processed_monkeys += bar(monkey)
return processed_monkeys
(これは単なるばかげた例です)c#の別のメソッド内でメソッドを宣言するこの機能を見逃すことがあります。しかし、今日、私はこれを達成するために次のアイデアを思いつきました。
List<Monkey> foo(List<Monkey> monkeys)
{
Func<Monkey, Monkey> bar = delegate(Monkey monkey)
{
//process and return new monkey
}
List<Monkey> processed_monkeys = new List<Monkey>(monkeys.Count);
foreach(Monkey monkey in monkeys)
processed_monkeys.Append(bar(monkey));
return processed_monkeys;
}
明らかに、回避策は、FuncまたはAction Delegatesが4つのパラメーターに制限されているため、元の機能とまったく同じ機能を提供しませんが、4つを超えるパラメーターが必要になることはめったにありません...
これについてどう思いますか?
これは悪であり、非常に特別な状況を除いてすべて避ける必要がありますか?
これのパフォーマンスはどうですか?関数が呼び出されるたびに新しいbar関数が作成されますか、それともコンパイラーはこれを何らかの方法で最適化しますか?