在Lua中读取动态变量名称

时间:2012-02-28 14:29:17

标签: variables dynamic lua

我想知道是否有可能读出动态变量名称? 由于将变量传递给我的脚本的程序只调用它们“in1,in2,in3”等。 希望有任何方法可以进行循环,因为单独处理每个输入非常烦人......

这是我到目前为止所尝试的内容,但它只是给了我一个错误。

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

我对Lua很新,但我希望解决方案并不困难:D

编辑: 哦,我会尽力给你一些信息。 “主要”程序不是用Lua编写的,只是设置了“in1 ...”变量。它是一种机器人程序化软件,并且内置了许多功能。这就是整个事情所以我不能简单地使用其他变量名称或数组。所以这不是一个功能或与Lua相关的任何其他内容...... 这是一个小截图http://www.bilderload.com/daten/unbenanntFAQET.jpg 目前,Lua脚本只是传递了第一个输入。

3 个答案:

答案 0 :(得分:5)

这取决于“动态变量名称”的含义。

本地变量的名称不存在。局部变量是声明为函数参数或local关键字的任何变量。局部变量被编译为Lua堆栈的偏移量,因此它们的名称不存在。您无法按名称索引某些内容以获取它们。

全局变量是全局表的成员。因此,这些设置全局变量的方法是等效的:

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

由于将变量传递给我的脚本的程序只调用它们“in1,in2,in3”等。

将变量传递给脚本的程序无法命名它们。变量只是值的占位符。它没有该值的所有权。当你的函数获得参数时,你的函数会命名它们。

你对程序的结构没有多说,所以我不能给出好的建议。但是,如果您只想将一些值作为参数并将其作为输入进行访问,则可以通过两种方式实现。您可以将包含值的表作为参数,或者您可以采用varargs:

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 :(得分:1)

无论是谁编写出代表这些“动态变量”的代码都没有做好。拥有它们是一种坏习惯,可能会导致数据丢失,全局名称空间混乱,......

如果你可以改变它,那么输出一个包含结果的表会好得多。

那就是说,你的解决方案并不遥远,但["in"..i]没有有效的Lua语法。你没有索引。如果这些变量是全局变量,则代码应为:

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

这将从全局表中读取变量包含的值。

答案 2 :(得分:1)

试试这个

  

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

如果变量作为全局变量传递,或者

myvar = {...}

如果变量作为参数传递给脚本。