无限“for i,v in pairs(table) do”循环?
Posted
技术标签:
【中文标题】无限“for i,v in pairs(table) do”循环?【英文标题】:Infinite "for i,v in pairs(table) do" Loop? 【发布时间】:2011-05-20 02:46:27 【问题描述】:if #subWords>0 then
print("Q3")
for a,b in pairs(subWords) do
table.insert(output,b)
print("Q2: Adding "..b)
end
end
----定义
--subWords 是一个包含四个字符串的表格
--输出是一个表格,里面有字符串
----目标
--合并表“输出”和“子词”
----输出
--重复打印“Q2:添加(单词)”(在其他内容之后)
--ROBLOX 崩溃
有什么想法吗?
【问题讨论】:
output
和 subWords
绝对是不同的表,对吧?
是的。而且我还修复了崩溃问题,但它仍然是一个无限循环:(。
【参考方案1】:
见 Phrogz 评论:subWords 和 output 是同一张表。
注意,在 Lua 中,表的值是引用,所以:
t1 =
t2 = t1
t3 = t2
t4 = t3
// all four of these variables refer to the *same* table
print(t4.food) -- nil
t1.food = "donut"
print(t4.food) -- donut
您的代码发生的情况是 subWords
和 output
引用同一个表。当您循环浏览此表中的项目时,您正在向其添加新项目,因此循环永远不会完成。
我知道你说情况并非如此,但这是唯一可能产生这些症状的事情。在循环之前尝试output =
,您会发现问题消失了。或者您可以assert(output ~= subWords)
或print(output, subWords)
看到它们是相同的,但我不知道 Roblox 如何处理这些功能(它可能没有输出控制台和/或它可能会捕获错误)。
【讨论】:
感谢您的帮助。 print(output, subWords) 是一个很好的建议,因为我永远不会相信这些表是相同的 :) 我忘记了输出表不是本地的,我在之前的行中重写了它......再次感谢! 我的头撞到了我的桌子上,遇到了类似的问题。谢谢!在这种情况下,它正在更新一些内部结构以供 IUP 应用程序使用。【参考方案2】:闻起来像 subWords 和 Output 是同一张表。 并且在遍历表时,永远不要向被遍历的表添加值,如 Lua 参考手册中所述:
[剪辑]
next 的行为是未定义的,如果, 在遍历期间,您分配任何 值到一个不存在的字段中 桌子。但是,您可以修改现有的 字段。特别是,您可以清除 现有字段。
[剪辑]
而pairs()
在内部使用下一个。
【讨论】:
以上是关于无限“for i,v in pairs(table) do”循环?的主要内容,如果未能解决你的问题,请参考以下文章