问题描述
如何合并多个Func委托?
假设我有两个代表
Func<bool> MovementButtonHold() => () => _inputSystem.MoveButtonHold
Func<bool> IsFreeAhead() => () => _TPG.IsFreeAhead();
有什么办法可以将这两个代表合并为一个Func<bool>
代表?
类似的东西:
和
Func<bool> delegate1 = MovementButtonHold() && IsFreeAhead();
或
Func<bool> delegate2 = MovementButtonHold() || IsFreeAhead();
解决方法
在您的代码中,MovementButtonHold和IsFreeAhead不是委托,它们是返回委托的方法。 因此,将它们结合起来需要这样的东西:
from dolphin import controller,event
while True:
await event.frameadvance()
buttons = controller.get_gc()
buttons["A"] = True
controller.set_gc(buttons)
await event.frameadvance()
# do nothing every other frame
请注意上面的()()怪异语法。第一个()是调用方法并返回委托,第二个()是调用委托以返回布尔值。然后,创建一个内联函数以对输出执行“ AND”或“ OR”运算,并将该内联函数分配给委托1或委托2
除非您有理由让MovementButtonHold和IsFreeAhead返回委托,否则可以按如下方式简化其实现,以简单地返回布尔结果。
Func<bool> delegate1 = () => MovementButtonHold()() && IsFreeAhead()();
Func<bool> delegate2 = () => MovementButtonHold()() || IsFreeAhead()();
,
Func<bool> MovementButtonHold = () => true;
Func<bool> IsFreeAhead = () => false;
Func<bool> delegate1 = () => MovementButtonHold() && IsFreeAhead();
Func<bool> delegate2 = () => MovementButtonHold() || IsFreeAhead();