2010-12-04 70 views
1
if #subWords>0 then 
print("Q3") 
for a,b in pairs(subWords) do 
table.insert(output,b) 
print("Q2: Adding "..b) 
end 
end 

----定義Infinite「for i,v in pairs(table)do」Loop?

--subWords是用四根弦的表在它

--output是一張桌子,用繩子在它

--- - 目標

- 合併表「輸出」和「子語」

----輸出

--Repeatedly打印 「Q2:添加(字)」(後其他的東西)

--Crashes ROBLOX

任何想法?

+0

`output`和`subWords`絕對是不同的表,對吧? – Phrogz 2010-12-04 04:51:23

+0

是的。我還修復了崩潰問題,但它仍然是一個無限循環:(。 – forbes 2010-12-04 05:01:33

回答

2

請參閱Phrogz評論:subWords和輸出是相同的表。

注意,在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

氣味像子字和輸出是相同的表。 以及遍歷表時,絕不添加值表被遍歷,因爲Lua的參考手冊中指出:

[剪斷]

如果 遍歷在明年的行爲是不確定的,你分配任何 值到 表中不存在的字段。但是,您可以修改現有的 字段。特別是,您可以清除 現有的字段。

[剪斷]

而且pairs()使用下一個內部。