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

Flo*_*ian 10 lua properties object

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

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

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

kik*_*ito 10

我将假设当你提到"对象"时,你的意思是"具有__index指向其他表格的元表的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
Run Code Online (Sandbox Code Playgroud)

但请记住,如果你的任何__indexes是一个函数,就没有办法获得所有的属性; 至少不是来自Lua.