2

IronJS には、CommonObject から派生したカスタム オブジェクトがあります。オブジェクトの未定義のプロパティへの呼び出しを傍受し、動的な応答を提供したいと考えています。(当社の状況ではすべてのプロパティを事前登録することはできないため、これは必須です。)

関数をオーバーライドすることで、このオブジェクトの関数呼び出しをキャプチャBoxedValue Get(string name)し、オブジェクトに事前登録せずに「その場で」関数を提供できます。

propertiesで同じことができることを望んでいますが、どのオーバーライドもこれを処理できないようです。誰かが IronJS について十分な経験を持ち、これにどのようにアプローチできるかを提案してくれることを願っています。

うまくいけば、これで私たちが達成しようとしていることを明確にすることができます:

IronJS.Hosting.CSharp.Context ctx = new IronJS.Hosting.CSharp.Context();
ctx.SetGlobal("data", new MyCustomObject());
string script = @"var x = data.mydynamicproperty;";
ctx.Execute(script);

スクリプトの実行時に、オーバーライドしてカスタム値を返すことができるようにしたいと考えています。例 (MyCustomObject クラス宣言):

public override BoxedValue Get(string name) {
    if (name == "mydynamicproperty") {
        return BoxedValue.Box("test");
    }
}

上記のオーバーライドは関数 (例: var x = data.mydynamicfunction();) に対して呼び出されますが、プロパティに対しては呼び出されません。

どんな助けや提案も大歓迎です。

4

1 に答える 1

1

関数の呼び出しとプロパティへのアクセスがコンパイルされる方法のため、これは現在(1/14/12現在)可能ではないようです。

関数の呼び出しはCommonObject、プロパティ名を持つオブジェクトの実装を要求しているようですが、通常のプロパティアクセスは、ランタイムの内部プロパティキャッシュにのみヒットし、オブジェクトのオーバーライドにはヒットしないようです。

これを処理するようにコードを変更しようとしています。メーリングリストで進捗状況を確認できます。

答えがわかったら、ここに投稿できます。F#の方が優れているとわかっていれば、おそらくより良い進歩を遂げることができるので、他の誰かがそうしている場合は、貢献してください:)

于 2012-01-14T23:29:01.050 に答える