2013-06-23 55 views
2

我在lua中有一个for循环,并且我正在尝试使用iterator变量在for循环中设置变量。我需要它来设置这些变量:在for循环中设置一个变量(使用临时变量)Lua

damage1 
damage2 
damage3 
damage4 
damage5 
damage6 
damage7 
damage8 
damage9 
damage10 
damage11 

当然,我不会将其分配给所有的,因为这将是打破D.R.Y.规则(不要重复自己)。这就是我想会的工作:

for i = 0, 11 do 
    damage..i = love.graphics.newImage('/sprites/damage/damage'..i..'.png') 
end 

不介意love.graphics.newImage(),这只是在我使用的框架的功能。反正,有人可以帮忙吗?

在此先感谢。

+1

可能的重复[如何在Lua中创建一个动态变量名?](http://stackoverflow.com/questions/5061755/how-do-i-make-a-dynamic-variable-name- in-lua) – finnw

回答

3

如果要设置全局变量,请设置_G["damage"..i]

如果你想设置局部变量,你是不走运的。

改为考虑设置damage[i]

+0

感谢您的快速回答!我将能够访问这个变量,就好像它是一个正常的变量,是吗? – hexagonest

2

如果你的变量是local变量,它不可能做你想做的事情,因为Lua在编译期间擦除了名字。如果您的变量是表的属性(比如全局变量),那么你可以使用一个事实,即表的访问是语法糖访问表中的字符串属性:

--using a global variable 
damage1 = 17 

--is syntax sugar for acessing the global table 
_G.damage1 = 17 

--and this is syntax sugar for acessing the "variable1" string property 
--of the global table 
_G["damage1"] = 17 

--and you can build this string dynamically if you want: 
_G["damage"..1] = 17 

然而,正如LHF说,它会可能会更简单,如果你存储在数组中,而不是作为独立变量,变量:

damages = {10, 20, 30, 40} 

for i=1,4 do 
    damages[i] = damages[i] + 1 
end 
+0

我做了一个本地表,而不是制作一个局部变量。 – hexagonest

0

这岂不是最好的事是什么?

damages = {} 

for i = 0,11 do 
    table.insert(damages, love.graphics.newImage("/sprites/damage/damage"..i..".png")); 
end 

然后通过损害赔偿[0]致电损害赔偿[1]。等等