2

我将 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 发生了变化)?

谢谢您的帮助。

4

1 回答 1

0

好的,我自己找到的。

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

于 2012-12-28T16:27:55.020 回答