"Для каждого" цикла в таблице lua с парами ключевых значений
скажем, у меня есть таблица, определенная следующим образом:
myTable = { myValue = nil, myOtherValue = nil}
Как бы я повторил его в каждом цикле моды, как это?
for key,value in myTable do --pseudocode
value = "foobar"
end
кроме того, если это помогает, я действительно не забочусь о ключе, Просто значение.
1 ответов
ключи, которые не имеют никакой ценности (т. е. являются nil
) отсутствуют. myTable
- это пустой таблица, насколько это касается Lua.
вы можете перебирать пустую таблицу, но это не будет полезно.
кроме того:
for key,value in myTable do --pseudocode
value = "foobar"
end
этот "псевдокод" не имеет смысла. Вы не можете изменить таблицу, изменив содержимое локальной переменной; Lua не работает таким образом. Вы не можете получить ссылку на запись таблицы; вы можете получить только стоимостью из-за стола.
если вы хотите изменить содержимое таблицы, вы должны фактически изменить в таблице. Например:
for key,value in pairs(myTable) do --actualcode
myTable[key] = "foobar"
end
обратите внимание на использование myTable
. Вы не можете изменить таблицу без использования самой таблицы в какой-то момент. Будет ли это стол через myTable
или через какую-либо другую переменную вы сохраняете ссылку на таблицу.
в общем, изменение таблицы во время итерации это может вызвать проблемы. Однако Луа говорит:
поведение
next
не определено, если во время обхода вы присваиваете какое-либо значение несуществующему полю в таблице. Однако можно изменить существующие поля. В частности, можно очистить существующие поля.
поэтому вполне допустимо изменить значение поля, которое уже существует. И key
очевидно, уже существует в таблице, поэтому вы можете ее изменить. Вы даже можете установить его в nil
С не проблема.
переменные в Lua являются не более чем держателями значений. Таблицы содержат значения; myTable[key]
возвращает значение. Вы можете сохранить это значение в переменной, но изменение переменной будет не изменить значение myTable[key]
. Поскольку таблицы хранятся по ссылке, вы можете изменить содержимое таблицы в одной переменной и увидеть изменения в другой, но это просто содержание стола, а не самого стола.