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