1

我有一个关于在 LuaInterface 中访问用户数据类型的问题。当我将 C# 字典传递给 Lua 并尝试使用 ipairs 对其进行迭代时,我收到一个错误,因为 ipairs 需要一个表而不是 userdata 对象。

我想一种解决方案是在将 Dictionary 类型传递给 Lua 之前将其转换为 LuaTable 类型,但我想将 userdata 类型用于其中的一种用途是将 Dictionary 对象引入 Lua 并更新 customType 对象的字段和在 Lua 中调用他们的方法。我不知道这是否可能,但我很确定如果我将该 Dictionary 转换为字符串和整数的 LuaTable,我将失去任何直接与 Lua 中的 customType 交互的机会。

我在网上查找了有关在 Lua 中使用 userdata 的信息,但是我发现了几个通过 C/C++ 与 Lua 接口的示例以及我不太了解的堆栈。此外,在某些情况下使用 sizeof 方法,这在 c# 中没有简单的替代方法。有人可以给我一些指示吗?关于 C 中用户定义类型的 PIL 部分也没有太大帮助。

4

1 回答 1

1

要使用 LuaInterface/NLua 遍历集合元素,您需要使用 luanet.each 而不是 ipairs。你不需要从你的 Dictionary 中创建 LuaTable。

luanet.each 将使用GetEnumerator,MoveNextCurrent遍历字典。

函数 luanet.each(o)
   本地 e = o:GetEnumerator()
   返回函数()
      如果 e:MoveNext() 那么
        返回 e.Current
     结尾
   结尾
结尾

而是for x in ipairs(dict)使用for x in luanet.each (dict)

参考:https ://github.com/NLua/NLua/blob/079b7966245cccb42c563abeb19290459e10934e/Core/NLua/Lua.cs#L245

于 2013-11-22T16:33:26.857 回答