是否有任何方法获取对象的所有非零参数/属性 ?我发现这个:getmetadata(self.xxxx)
,我正在寻找类似的东西:getalldata(self).
如何查找lua中某个对象的所有属性?
我目前正在参与lua的项目。不幸的是,没有完整的参考,我不得不使用预编译的东西。
我希望你能够理解我想说的话。
是否有任何方法获取对象的所有非零参数/属性 ?我发现这个:getmetadata(self.xxxx)
,我正在寻找类似的东西:getalldata(self).
如何查找lua中某个对象的所有属性?
我目前正在参与lua的项目。不幸的是,没有完整的参考,我不得不使用预编译的东西。
我希望你能够理解我想说的话。
我要去假设当你指的是“对象”。意思是“带有__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
但要记住,如果你的任何__index
ES的是一个函数,有没有办法让所有属性;至少不是来自Lua。
我相信,对象是只是一个表,所以你应该能够在性能迭代任何其他表:
for i,v in ipairs(your_object) do body end
我写我自己printObject代码..这是
function printObj(obj, hierarchyLevel)
if (hierarchyLevel == nil) then
hierarchyLevel = 0
elseif (hierarchyLevel == 4) then
return 0
end
local whitespace = ""
for i=0,hierarchyLevel,1 do
whitespace = whitespace .. "-"
end
io.write(whitespace)
print(obj)
if (type(obj) == "table") then
for k,v in pairs(obj) do
io.write(whitespace .. "-")
if (type(v) == "table") then
printObj(v, hierarchyLevel+1)
else
print(v)
end
end
else
print(obj)
end
end
这是相反的做法,则用后前。 浏览表格中的所有键值对。如果一个索引的值是一个表,请通过该表。 这个解决方案不会像其他文章那样得到向上的元表达式
这是用于调试目的的有用代码。 – 2017-06-09 17:01:03
这只会给你数字键“属性”。我说的是你的意思是'双'而不是'ipairs'。 – Jakob 2011-04-14 13:58:24
是的,这是egarcia在其更完整的解决方案中所包含的内容。感谢您指出这个错误。 – BMitch 2011-04-14 17:06:48