无限“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 崩溃

有什么想法吗?

【问题讨论】:

outputsubWords 绝对是不同的表,对吧? 是的。而且我还修复了崩溃问题,但它仍然是一个无限循环:(。 【参考方案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

您的代码发生的情况是 subWordsoutput 引用同一个表。当您循环浏览此表中的项目时,您正在向其添加新项目,因此循环永远不会完成。

我知道你说情况并非如此,但这是唯一可能产生这些症状的事情。在循环之前尝试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”循环?的主要内容,如果未能解决你的问题,请参考以下文章

无限计数器的无限列表

ASP 无限级分类

无限极为啥要冠名央视的《消费主张》栏目?

无限极健康产品批准文号

苹果手机怎么无限刷APP试玩?IPhone试玩app无限刷教程技术!

关于PHP无限极分类