我将SharpLua与MonoDevelop一起使用。我在C#端创建了一个类,它可以从Lua中使用。这很好用,我可以访问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被更改了)?
感谢您的帮助。
答案 0 :(得分:0)
好的,我自己找到了。
您可以使用函数get_Item()和set_Item()从Lua扩展C#类。这两个函数与Lua metatable中的__index和__newindex相同。因此,您可以在C#中创建一个Dictionary表,并将其填入set_Item()函数中。如果LuaInterface没有在类中找到一个条目,它会调用get_Item()来查看,如果它可以通过这种方式获取值。在那里你可以查看你的表,如果它是一个有效的键值对。