无限循环:"for i,v in pairs(table) do"?

如果 #subWords>0 then
print("Q3")
for a,b in pairs(subWords) do
table.insert(output,b)
print("Q2: Adding "..b)
end
end

----定义

--subWords 是一个包含四个字符串的表格

--output 是一个包含字符串的表格

----目标

--合并表格“output”和“subWords”

----输出

--不断打印 “Q2: Adding (word)"(其他东西后)

--导致 ROBLOX 崩溃

有什么想法?

原文链接 https://stackoverflow.com/questions/4351996

点赞
stackoverflow用户501459
stackoverflow用户501459

请注意,在 Lua 中,表的值是“引用”,因此:

t1 = {}
t2 = t1
t3 = t2
t4 = t3

// 所有这四个变量都引用同一个表

print(t4.food) -- nil
t1.food = "donut"
print(t4.food) -- donut

你的代码发生的情况是 subWordsoutput 引用了同一个表。当你循环遍历这个表的项目时,你会向其中添加新的项目,因此循环永远不会结束。

我知道你说这不是问题所在,但这是产生这些症状的唯一可能性。尝试在循环之前使用 output = {},你会发现问题消失了。或者你可以使用 assert(output ~= subWords)print(output, subWords) 来查看它们是否相同,但我不知道 Roblox 是如何处理这些函数的(它可能没有输出控制台和/或它可能会捕获错误)。

2010-12-04 06:36:21
stackoverflow用户513763
stackoverflow用户513763

Smells like subWordsOutput is the same table 的意思相同。

当遍历表时,不要向正在遍历的表中添加值,因为在 Lua 参考手册中已经说明了:

在遍历过程中,如果向表中不存在的字段分配值,则next的行为是未定义的。但您可以修改现有字段。特别地,您可以清除现有字段。

pairs() 内部使用 next

2010-12-04 09:38:39