有没有办法获得所有非零参数/属性
一个物体?我发现了这个:getmetadata(self.xxxx)
我正在寻找类似:getalldata(self).
我目前正在开展涉及lua的项目。不幸的是,没有完整的参考,我必须使用预编译的东西。
我希望你能理解我想说的话。
答案 0 :(得分:10)
我将假设当你提到“对象”时,你的意思是“带有__index
metatable的lua表指向其他表”。如果不是这样,这个答案对你没有帮助。
如果您的对象结构是使用表(这是所有__indexes
都是表),那么您可以“解析它们”以获取所有属性和继承属性。
如果您有__index
的任何功能,那么您提出的要求是不可能的;没有办法得到“函数返回非零值的值列表”。
在第一种情况下,代码如下所示:
function getAllData(t, prevData)
-- if prevData == nil, start empty, otherwise start with prevData
local data = prevData or {}
-- copy all the attributes from t
for k,v in pairs(t) do
data[k] = data[k] or v
end
-- get t's metatable, or exit if not existing
local mt = getmetatable(t)
if type(mt)~='table' then return data end
-- get the __index from mt, or exit if not table
local index = mt.__index
if type(index)~='table' then return data end
-- include the data from index into data, recursively, and return
return getAllData(index, data)
end
但请记住,如果你的任何__index
es是一个函数,那么就无法获得所有属性;至少不是来自Lua。
答案 1 :(得分:1)
我相信对象只是一个表,所以你应该能够像任何其他表一样迭代属性:
for i,v in ipairs(your_object) do body end
答案 2 :(得分:1)
我编写了自己的printObject代码..这里是
select dog_id, Name, year(curdate()) - born as age
From Dogs
Order by dog_id
这与使用之前的帖子相反。 遍历表中的所有键值对。如果一个索引的值是表,请通过此表。 这个解决方案不会像其他帖子那样获得向上的元数据