在for循环中设置变量(使用临时变量)Lua

时间:2013-06-23 20:09:02

标签: for-loop lua love2d

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

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(),这只是我正在使用的框架中的一个功能。无论如何,有人可以帮忙吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

如果你想设置局部变量,那你就不走运了。

请考虑设置damage[i]

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

答案 2 :(得分:0)

这不是最好的事吗?

damages = {}

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

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