如何解决如何合并多个Func <>委托
如何合并多个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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。