在IronPython中,我試圖用C#中不同數量的參數調用PythonFunction。例如;具有可變數量參數的IronPython函數作爲代理
我想做的事:
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")
其中addHandler
只有一個參數,並以某種方式將其存儲在一個方法列表來調用和invoke
具有這樣的特徵:
public virtual void invoke(params object[] tArgs)
因爲我想避免使它具體到PythonEngine
(並因此engine.Operations.Invoke()
),我嘗試了幾種方式來存儲和實現這些東西作爲代表,但我認爲我的問題的癥結在於,我不知道如何去請參考某種MulticastDelegate
基本類型,它與PythonFunction
兼容?
也許我想實現我自己的DynamicInvoke
方法?任何想法和經驗將不勝感激!
想要做到這一點的原因是我想透明地將密封的Javascript引擎的調用映射到通過C#的IronPython。即在JavaScript調用:使用下面的動態事件綁定
def doThing(s, i, d):
pass
:
doThingEvent = App.DynamicEvent()
doThingEvent.addHandler(doThing)
WebBrowser.handleMethod("doThing", doThingEvent);
你的意思是你想讓'invoke()'從你使用'addHandler()'添加的'delegate'列表中選擇正確的'delegate',根據它的簽名(它所需要的類型),然後調用它? – 2010-10-02 15:38:45
討厭,因爲我設法使用'PythonFunction'作爲'Delegate'之前,我只需要找到代碼。 – 2010-10-02 16:26:40
重載是否僅使用'object'作爲參數是否重要? 'void doThing(object)','void doThing(object,object,object)'等等?否則像'def add(a,b):a + b'這樣的東西是不明確的,因爲它可以使用任何數字類型。 – 2010-10-02 16:46:20