私はサイコロの初心者です。Rhino内で 'for ... in'のNativeJavaObjectを有効にするにはどうすればよいですか?
現在、.NET 4およびIKVM.NETを介してRhino 1.7Rフレームワークを使用しています。 setWrapFractory()APIを使用してNativeJavaObjectを実装しているいくつかのラップされたクラスを公開しました。
public class InterceptNativeObject : NativeJavaObject
{
public InterceptNativeObject()
{
}
public override Object get(String name, Scriptable start)
{
Object res = base.get(name, start);
if (res is NativeJavaMethod)
{
NativeJavaMethod method = (NativeJavaMethod)res;
return new RhinoMethodWrapFunction(method);
}
if (res == org.mozilla.javascript.UniqueTag.NOT_FOUND &&
base.javaObject is IPropertBox && base.javaObject != null)
{
object ret = ((IPropertBox)base.javaObject)._x__GetPropertyValue(name);
return Utils.ConvertCLRValueToJavaValue(ret);
}
return res;
}
.....
}
ここで、私が望むすべての.NETメソッドとプロパティにアクセスできます。
私の現在の問題は、 'for ... in'という私のNativeJavaObjectクラスをサポートすることです。 私は
'for(var prop in myClass){printf(prop);};' ,
を評価するとき、それはエラー「非オブジェクトの呼び出し 『に』いいえ」を返します。
_ イテレータ _ "のオブジェクトを検索しようとして「取得」と思われるが、それは、get()関数で「が見つかりません」になりました。だから、それは例外で終わる。 。 はこれまでのところ、私は
- はjava.util.Iteratorの
- リターンthis.getIds()を追加しようとしたGetEnumrator();
ラップされたNativeJavaObjectのプロパティの列挙型アクセスを許可するにはどうすればよいですか? 'for ... in'を有効にするRhinoの期待戻り値は何ですか? '_ イテレータ _'?
ありがとうございます!
ありがとうございました。 "__iterator___"はオブジェクトを処理するのではなく、処理する関数を探していました。私はsetLanguageVersion(170)でも試してみます。非常に有益な情報を提供してくれてありがとう! –
最後にIteratorクラスを 'ScriptableObject'として作成して、NativeJavaObjectを繰り返し処理しました。今度は 'for(ドキュメント内のvar){}'と 'if(' window内の位置 '){}'を実行します。ありがとうございました! –
@Yone、よろしくお願いします。ハッピースクリプティング。 –