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
メソッドを実装したいですか?どんな考えや経験でも大歓迎です!
これを実行する理由は、封印されたJavascriptエンジンからの呼び出しをC#経由で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);