C#和LuaInterface:如何将表条目添加到Lua中的C#对象

时间:2012-11-16 12:15:13

标签: integration luainterface

我将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被更改了)?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了。

您可以使用函数get_Item()和set_Item()从Lua扩展C#类。这两个函数与Lua metatable中的__index和__newindex相同。因此,您可以在C#中创建一个Dictionary表,并将其填入set_Item()函数中。如果LuaInterface没有在类中找到一个条目,它会调用get_Item()来查看,如果它可以通过这种方式获取值。在那里你可以查看你的表,如果它是一个有效的键值对。