Читать имена динамических переменных в Lua - PullRequest
2 голосов
/ 28 февраля 2012

Я хотел бы знать, есть ли возможность считывать имена динамических переменных? Так как программа, которая передает переменные в мой скрипт, называет их просто «in1, in2, in3» и т. Д. Надеемся, что есть какой-нибудь способ сделать цикл, потому что довольно неудобно обрабатывать каждый вход отдельно ...

Вот то, что я пробовал до сих пор, но это просто дает мне ошибку.

for i=1,19,2 do
myvar[i] = ["in"..i]
end 

Я довольно новичок в Lua, но я надеюсь, что решение не так уж сложно: D

Edit: О, я постараюсь дать вам больше информации. Программа «Main» не написана на Lua, а просто устанавливает переменные «in1 ...». Это своего рода роботизированное программное обеспечение, в которое встроено множество функций. Вот и все, поэтому я не могу просто использовать другие имена переменных или массив. Так что это не функция или что-то еще, связанное с Lua ... Вот маленький скриншот http://www.bilderload.com/daten/unbenanntFAQET.jpg На данный момент скрипт Lua просто передает первый ввод.

Ответы [ 3 ]

5 голосов
/ 28 февраля 2012

Это зависит от того, что вы подразумеваете под «именами динамических переменных».

Имена локальных переменных не существуют.Локальные переменные - это любая переменная, объявленная как параметр функции или с ключевым словом local.Локальные переменные компилируются в смещения в стек Lua, поэтому их имена не существуют.Вы не можете индексировать что-либо по имени, чтобы получить их.

Глобальные переменные являются членами глобальной таблицы.Следовательно, эти способы установки глобальной переменной эквивалентны:

globalVar = 4
_G.globalVar = 4
_G["globalVar"] = 4

Поскольку программа, передающая переменные моему сценарию, называет их просто "in1, in2, in3" и т. Д.

Программа, которая передает переменные в ваш скрипт, не может их назвать.Переменная - это просто заполнитель для значения.Он не имеет права собственности на эту ценность.Когда ваша функция получает аргументы, ваша функция получает их имена.

Вы не много сказали о структуре вашей программы, поэтому я не могу дать хороший совет.Но если вы просто хотите принять некоторое количество значений в качестве параметров и получить доступ к ним в качестве входных данных, вы можете сделать это двумя способами.Вы можете взять таблицу, содержащую значения в качестве параметра, или вы можете взять переменные:

function MyFunc1(theArgs)
  for i, arg in ipairs(theArgs) do
    --Do something with arg.
  end
end

function MyFunc2(...)
  for i, arg in ipairs({...}) do
    --Do something with arg.
  end
end

MyFunc1 {2, 44, 22} --Can be called with no () because it takes a single value as an expression. The table.
MyFunc2(2, 44, 22)
1 голос
/ 28 февраля 2012

Попробуйте это

myvar = {in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19}

если переменные передаются как глобальные переменные, или это

myvar = {...}

если переменные передаются в качестве аргументов скрипту.

1 голос
/ 28 февраля 2012

Кто бы ни написал код, который выплевывает эти «динамические переменные», не сделал хорошую работу.Иметь их - вредная привычка, которая может привести к потере данных, загромождению глобального пространства имен, ...

Если вы можете изменить его, было бы намного лучше просто вывести таблицу, содержащую результаты.

Тем не менее, ваше решение не за горами, но ["in"..i] не является допустимым синтаксисом Lua.Вы индексируете в ничто.Если эти переменные являются глобальными, ваш код должен иметь следующий вид:

for i=1,19,2 do
    myvar[i] = _G["in"..i]
end

Это считывает значения, содержащиеся в ваших переменных, из глобальной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...