Бесконечный "Для i, v в парах (таблица) сделать" цикл?

StackOverflow https://stackoverflow.com/questions/4351996

Вопрос

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()использует следующий внутренне.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top