#for-loop #lua #lua-table
#цикл for #lua #lua-таблица
Вопрос:
Честно говоря, я пока не совсем хорошо понимаю Lua. Я пытаюсь перезаписать локальное числовое значение, присвоенное заданному адресу таблицы (это правильный термин?).
Адреса имеют тип:
project.models.stor1.inputs.T_in.default
project.models.stor2.inputs.T_in.default
и так далее с увеличением stor
числа.
Я хотел бы сделать это в цикле for, но не могу найти правильное выражение, чтобы заставить Lua принять всю строку в качестве адреса таблицы (опять же, я надеюсь, что это правильный термин).
До сих пор я пробовал следующее, чтобы объединить строки, но безуспешно вызывал, а затем перезаписывал значение:
for k = 1,10,1 do
project.models.["stor"..k].inputs.T_in.default = 25
end
for k = 1,10,1 do
"project.models.stor"..j..".T_in.default" = 25
end
Редактировать:
Я думаю, что нашел решение согласно https://www.lua.org/pil/2.5.html:
Распространенная ошибка новичков — путать .x с a[x] . Первая форма представляет [«x»], то есть таблицу, индексируемую строкой «x». Вторая форма — это таблица, индексируемая значением переменной x. Видите разницу:
for k = 1,10,1 do
project["models"]["stor"..k]["inputs"]["T_in"]["default"] = 25
end
Ответ №1:
Вы были почти близки.
Lua поддерживает это представление, предоставляя a.name как синтаксический сахар для [«name»].
Подробнее: https://www.lua.org/pil/2.5.html
Вы можете использовать только один синтаксис за раз.
Либо tbl.key
или tbl["key"]
.
Ограничение .
заключается в том, что вы можете использовать в нем только постоянные строки (которые также являются допустимыми именами переменных).
В квадратных скобках []
вы можете вычислять выражения времени выполнения.
Правильный способ сделать это:
project.models["stor"..k].inputs.T_in.default = 25
Ввод .
models.["stor"..k]
не является необходимым и вызывает ошибку. Правильный синтаксис просто models["stor"..k]
.
Комментарии:
1. Вау! Я только что нашел это сам. Большое вам спасибо за более краткое объяснение синтаксиса! Будет
project["models"]["stor"..k]["inputs"]["T_in"]["default"] = 25
ли это работать?2. @Martin Да,
project["models"]
это то жеproject.models
самое, что, например. ( Точно так же)3. @Martin Важной частью является то, что вы можете их смешивать:
foo.bar["baz"]
илиfoo["bar"].baz
оба работают