2013-06-23 52 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]。等等