如何在lua中找出对象的所有属性?

时间:2011-04-12 14:10:39

标签: object properties lua

有没有办法获得所有非零参数/属性 一个物体?我发现了这个:getmetadata(self.xxxx)我正在寻找类似:getalldata(self).

的内容

我目前正在开展涉及lua的项目。不幸的是,没有完整的参考,我必须使用预编译的东西。

我希望你能理解我想说的话。

3 个答案:

答案 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

这与使用之前的帖子相反。 遍历表中的所有键值对。如果一个索引的值是表,请通过此表。 这个解决方案不会像其他帖子那样获得向上的元数据