2

私は MonoDevelop で SharpLua を使用しています。Luaから使えるはずのC#側のクラスを作りました。Lua からすべてのフィールドにアクセスできます。それは非常に簡単です。

public class Test {
  public string Name;
}

でLuaからアクセスできます

print(test.Name)

さて、Lua で新しいフィールドを作成したいと思います。Luaでは次のようになります

test.abc = "A string"
print(test.abc)

しかし、これはうまくいきませんでした。ObjectTranslator でエラーが発生します。そのため、Lua からテーブルを拡張できませんでした。C# からこの新しいエントリにアクセスしたくありませんでした。それらを作成することだけが可能であるべきです。

これを達成する他の方法はありますか?LuaTable からクラスを作成し、これを Lua に挿入できますか?

lua["NewLuaTable"] = new ClassFromLuaTable;

Luaで使用するよりも

NewLuaTable.abc = "A string"
print(NewLuaTable.abc);

しかし、知りたいことが LuaTable で変更された (NewLuaTable.Name が変更された) という通知をどのように受け取ったのでしょうか?

ご協力ありがとうございました。

4

1 に答える 1

0

わかりました、私は自分でそれを見つけました。

関数 get_Item() および set_Item() を使用して、Lua から C# クラスを拡張できます。これらの両方の関数は、Lua メタテーブルの __index および __newindex と同じです。したがって、C# でディクショナリ テーブルを作成し、set_Item() 関数に入力することができます。LuaInterface がクラス内にエントリを見つけられなかった場合、 get_Item() を呼び出して、この方法で値を取得できるかどうかを確認します。有効なキーと値のペアである場合は、テーブルを調べることができます。

于 2012-12-28T16:27:55.020 に答える