无限“为我,v成对(表)做”循环?

时间:2010-12-04 04:49:01

标签: loops lua infinite-loop roblox

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

----定义

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

- 输出是一个表,其中包含字符串

----目标

- 合并表“output”和“subWords”

----输出

- 反复打印“Q2:添加(字)”(在其他内容之后)

- 崩溃ROBLOX

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

参见Phrogz评论:子词和输出是同一个表。

请注意,在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如何处理这些功能(它可能没有输出控制台和/或它可能会捕获错误)

答案 1 :(得分:1)

闻起来像subWords和Output是同一个表。 在遍历表时,永远不要向正在遍历的表添加值,如Lua参考手册中所述:

  

[剪断]

     

如果,未定义next的行为,   在遍历期间,您指定任何   值的一个不存在的字段   表。但是,您可以修改现有的   领域。特别是,你可以清楚   现有领域。

     

[剪断]

pairs()在内部使用。