打印语句不在 ipirs 循环中执行
2021-3-29 12:13:42
收藏:0
阅读:145
评论:3
我定义了如下表,它包含在字符串索引下定义的表:
local myTable = {
["str-1"] = {
id = 1,
value = "val"
},
["str-2"] = {
id = 2,
value = "val",
},
["str-3"] = {
id = 3,
value = "val",
}
}
for i, table in ipairs(myTable) do
print(i)
print(table)
end
我尝试循环遍历表格内容,但 print() 语句不输出任何内容?我已经使用了 print 语句来打印循环当前索引和该位置上的表格。
点赞
用户2858170
从Lua参考手册:ipairs中可以看出:
ipairs (t)
返回三个值(一个迭代器函数,表t和0),使得以下结构成立
for i,v in ipairs(t) do body end将遍历键值对(1,t[1]),(2,t[2])等,直到第一个索引不存在。
可以看出ipairs只适用于序列。
由于您的表中没有任何键值对(1,t[1]),(2,t[2]),因此通用for循环会立即终止。
请使用pairs
如果t具有元方法__pairs,则使用t作为参数调用它并返回调用的前三个结果。
否则,返回三个值:下一个函数,表t和nil,以便以下构造成立
for k,v in pairs(t) do body end将遍历表t中的所有键值对。
有关在遍历过程中修改表的注意事项,请参见函数next。
2021-03-29 08:15:23
用户11740758
是时候呈现一个既能处理一个表参数,也能处理包含两个数字的表参数的版本了...
tprint = function(self, ...)
local args = {...}
local start = args[1]
local stop = args[2]
if type(args[1]) == 'number' and type(args[2]) == 'number' then
for i = start, stop do
io.write(string.format('%d = %s\n', i, table.concat(self, '', i, i)))
end
else
for key, value in pairs(self) do
io.write(string.format('%s = %s\n', key, value))
end
end
end
当只有一个表参数时,它使用 pairs()。
当有一个表和两个数字时,它将打印出起始值(第一个数字)和终止值(第二个数字)。
一个常常以键 0 开始的 arg 例子:
-- 只打印出键0
> tprint(arg,0,0)
0 = /root/lua-5.4.0/src/lua
-- 使用pairs()
> tprint(arg)
1 = -i
2 = -e
3 = setmetatable(arg,{__index={code={},concat=table.concat}});
0 = /root/lua-5.4.0/src/lua
我将其作为一个 arg 的元表方法使用,作为 __call 或/和 __index.tprint。
2021-03-29 19:02:53
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 代码?

这是因为您正在尝试在一个关联数组上使用
ipairs()循环。相反,您可以使用支持表索引为关联型的
pairs()循环进行迭代:for i, table in pairs(myTable) do print(i) print(table) end一个
pairs()循环使用键值对并且适用于关联型表,这也导致迭代不按顺序进行,而ipairs()使用索引-值对,这种类型的匹配可以用于使用数字索引定义的表。