我正在使用swig-lua。我在Lua中有一个函数,我调用它,它返回一个指针(userdata)。现在我知道这个指针是什么,但我怎么能从Lua内部告诉Lua?
答案 0 :(得分:3)
setmetatable(table,metatable)
设置给定的元表 表。 (你无法改变 来自Lua的其他类型的元素, 仅来自C。)
你不能“告诉Lua”在Lua中userdata
是什么。它必须被赋予metatable或使用C API通过绑定函数调用进行操作。有关详细信息,请参阅chapter 28.1 of Programming in Lua (Pil)。
答案 1 :(得分:0)
userdata的定义是Lua没有,不能,也不想知道它是什么。这是你的数据 - 这是你的问题。如果你想操纵它,那么你必须用它调用C函数(运算符重载可通过metatable设置)。
答案 2 :(得分:-1)
告诉SWIG有关void
指针指向的数据类型。如果SWIG知道该类型,那么它会将其作为userdata
传递给Lua,并附带一个合适的元数据,允许Lua端访问和修改各个数据字段(如果它是一个类,则调用称其方法)。
这可能意味着告诉SWIG关于库不需要的一些数据类型,但从长远来看可能是值得的。
所有Lua都知道其metatable中包含userdata的类型。如果两个userdata
值具有相同的元表,则它们的类型相同。 metatable负责调解从Lua端对其内容的所有访问,并且通常由在C中实现的方法组成,以便可以做到。如果没有这样的元数据,那么Lua方只能将userdata
视为不透明的blob。