"Для каждого" цикла в таблице lua с парами ключевых значений



Допустим, у меня есть таблица, определенная следующим образом:



myTable = { myValue = nil, myOtherValue = nil}



Как бы я повторил его в каждом цикле моды, как это?



  for key,value in myTable do --pseudocode
value = "foobar"
end


Кроме того, если это поможет, я действительно не забочусь о ключе, Просто значение.
548   1  

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]. Поскольку таблицы хранятся по ссылке, вы можете изменить содержимое таблицы в одной переменной и увидеть изменения в другой, но это просто содержимое таблицы, а не сама таблица.

Comments

    Ничего не найдено.