好的,在 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 函数,还是编译器会以某种方式对其进行优化?