Бесконечный "для i, v в парах (таблица) сделать" цикл? - PullRequest
1 голос
/ 04 декабря 2010
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 ]

2 голосов
/ 04 декабря 2010

См. Комментарий 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 обрабатывает эти функции (у него может не быть консоли вывода и / или он может перехватывать ошибки).

1 голос
/ 04 декабря 2010

Пахнет как subWords и Output - та же таблица. И при обходе таблиц никогда не добавляйте значения к таблицам, по которым осуществляется просмотр, как указано в Справочном руководстве Lua:

[надрез]

Поведение следующего не определено, если, во время обхода вы назначаете любой значение для несуществующего поля в Таблица. Однако вы можете изменить существующие поля. В частности, вы можете очистить существующие поля.

[надрез]

И pairs() использует следующее внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...