如何在Lua中查找一个对象的所有属性?
2017-6-8 17:0:28
收藏:0
阅读:454
评论:3
有没有一种方法可以获取对象的所有非 nil 参数/属性?我找到了这个:getmetadata(self.xxxx)
,我正在寻找这样的东西:getalldata(self)
。
我目前正在处理涉及 Lua 的项目。不幸的是,没有完整的参考资料,我必须使用预编译的东西。
我希望你能理解我想说什么。
原文链接 https://stackoverflow.com/questions/5636596
点赞
stackoverflow用户312586
我假设你所说的“objects”指的是“带有一个指向其他表的__index元表的lua表”。如果不是这样,这个答案将无法帮助你。
如果你的对象结构是由表构成的(也就是说,所有的__index都是表),那么你可以“分解它们”来获取所有属性和继承属性。
如果你有任何函数作为__index
,那么你要求的是不可能的;没有办法得到“某个函数返回非nil值的值列表”。
在第一种情况下,代码应该是这样的:
function getAllData(t, prevData)
-- 如果prevData == nil,则开始为空,否则从prevData开始
local data = prevData or {}
-- 复制t的所有属性
for k,v in pairs(t) do
data[k] = data[k] or v
end
-- 获取t的元表,如果没有则退出
local mt = getmetatable(t)
if type(mt)~='table' then return data end
-- 获取mt的__index,如果不是表则退出
local index = mt.__index
if type(index)~='table' then return data end
-- 将索引中的数据递归地包含到data中,并返回
return getAllData(index, data)
end
但是请记住,如果你的任何__index
都是一个函数,就没有办法得到所有的属性;至少从Lua来说是这样的。
2011-04-12 18:08:32
stackoverflow用户3759231
我写了自己的 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
这是与之前post使用的相反的方法。 遍历表中的所有键值对。如果一个索引的值是一个表,则需要遍历这个表。 这种解决方案不会像另一篇文章那样获取上游元表。
2015-04-27 11:53:27
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我认为对象只是一个表格,因此您应该可以像遍历其他表格一样遍历属性:
for i,v in ipairs(your_object) do body end