在 IronPython 中,我试图从 C# 调用具有不同数量参数的 PythonFunction。例如;
我想要做:
def foo(a, b):
print a, b
def bar(a, b, c = None):
print a, b, c
p = App.DynamicEvent()
p.addHandler(foo)
p.addHandler(bar)
p.invoke("Not", "Working")
whereaddHandler
接受一个参数并以某种方式将其存储在要调用的方法列表中,并invoke
具有如下签名:
public virtual void invoke(params object[] tArgs)
因为我想避免使其特定于PythonEngine
(因此engine.Operations.Invoke()
),所以我尝试了几种将这些东西存储和实现为代表的方法,但我认为我的问题的症结在于我不知道如何存储某种与?MulticastDelegate
兼容的基本类型PythonFunction
也许我想实现自己的DynamicInvoke
方法?任何想法和经验将不胜感激!
想要这样做的原因是我想通过 C# 透明地将来自密封 Javascript 引擎的调用映射到 IronPython。即在Javascript调用中:Client.doThing("something", 4, {"key:"value"})
并在python中处理它:
def doThing(s, i, d):
pass
使用以下动态事件绑定:
doThingEvent = App.DynamicEvent()
doThingEvent.addHandler(doThing)
WebBrowser.handleMethod("doThing", doThingEvent);