Бесконечный "Для i, v в парах (таблица) сделать" цикл?
-
08-10-2019 - |
Вопрос
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 - это стол, с строками в нем
----Цель
- Чтобы объединить таблицы «вывод» и «подсловки»
----Выход
- Депантически печатает "Q2: добавление (слово)" (после других вещей)
- обрабатывает ролокс
Есть идеи?
Решение
Смотрите комментарий 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
Что происходит с вашим кодом, это то, что subWords
а также output
ссылаются на одну таблицу. Как вы пишите через предметы в этой таблице, вы добавление Новые предметы к нему, поэтому цикл никогда не будет сделан.
Я знаю, что вы сказали, что это не так, но это единственное, что могло бы произвести эти симптомы. Пытаться output = {}
Перед циклом, и вы увидите, что проблема уходит. Или вы могли бы assert(output ~= subWords)
или print(output, subWords)
Чтобы увидеть, что они одинаковы, но я не знаю, как Roblox обрабатывает эти функции (у него не может быть выходная консоль и / или она может ошибоваться ошибками).
Другие советы
Запахи, такие как подсловки и вывод, - это та же таблица. А при прохождении таблиц никогда не добавляйте значения в таблицы, которые пройдены, как указано в справочном руководстве LUA:
Снайп
Поведение следующего не определено, если во время обхода вы назначаете любое значение несуществующему поле в таблице. Однако вы можете изменить существующие поля. В частности, вы можете очистить существующие поля.
Снайп
А также pairs()
использует следующий внутренне.