【发布时间】:2010-12-02 15:50:48
【问题描述】:
大家好,关于如何调用这个 lambda 或它实际做什么的快速问题..
public Composite CreateBuffCheckAndCast(string name, UnitSelectDelegate onUnit, CanRunDecoratorDelegate extra)
{
return new Decorator(
ret => Spells.CanBuff(name, onUnit(ret)) && extra(ret),
new Action(ret => Spells.Buff(name, onUnit(ret))));
}
不幸的是没有这个类的其余部分,并且有一段时间没有使用 Lambdas 了。那个“ret”变量是从哪里来的?调用函数?它是用来抓取 IEnumerable 的吗?我可以看到编译器为它分配了 onUnit 可以接受的任何类型..?
解决方案:
ret => 用于将 Spells.CanBuff 转换为 Decorator 接受的委托类型。 onUnit 也可以接受委托函数参数。
【问题讨论】:
-
“这适用于上述函数还是 Lambda 以其他方式使用”是什么意思?
-
你能告诉我调用 CreateBuffCheckAndCast 的正确方法,然后填充 ret lambda 变量吗?
-
您没有填充 ret /parameter/。 CreateBuffCheckAndCast 没有返回任何 lambda 表达式,只是一个 Composite(它恰好是一个装饰器)。因此,您只能对它执行 Composite 可以执行的操作,无论您使用的库是什么。
-
第二个代码示例具有完全不同的返回类型......它返回一个Action
,这意味着一个将ISyncClient 作为参数并返回void 的Action。由于它返回一个动作,您可以在返回的 lambda 表达式中传递 sc 的参数。你不能对第一个代码 sn-p 这样做......就像我说的那样,它返回一个 Composite,而不是 Func 或 Action。 -
明白,想要解释。我正在尝试学习代码,而不仅仅是使用库。所以谢谢!我不喜欢魔法密码。 =) 不太明白 lambda 的位置,但我现在明白了。
标签: c# lambda delegates anonymous-function