我们假设我有
现在我已将代码段B的内容复制到代码段A中.这有一个缺点,即每当我改变片断乙,我必须另行更改段一个.因此,我的问题是是否有某种声明将一个片段嵌入到另一个片段中?
例如
<externalsnippet src=".\snippetB.snippet" />
或类似的东西.
好的,在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
Run Code Online (Sandbox Code Playgroud)
(这只是一个愚蠢的例子)我有时会错过在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;
}
Run Code Online (Sandbox Code Playgroud)
显然,变通方法不提供与原始功能完全相同的功能,因为Func或Action Delegates限制为4个参数,但很少需要4个以上的参数......
你对此有何看法?
这是邪恶的,应该避免除了非常特殊的情况吗?
这个表现如何?每次调用函数时都会创建一个新的bar函数,还是编译器会以某种方式优化它?