访问Lua中的用户数据属性和方法



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

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

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

要使用LuaInterface/NLua迭代集合元素,需要使用luanet.each而不是ipairs。您不需要从字典中创建LuaTable。

luanet.each将使用GetEnumeratorMoveNextCurrent来遍历Dictionary。

函数luanet.each(o)local e=o:GetEnumerator()return函数()如果e:MoveNext(),则return e.电流终止终止终止

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

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

最新更新