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