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