2

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

damage1
damage2
damage3
damage4
damage5
damage6
damage7
damage8
damage9
damage10
damage11

当然,我不会将它们全部分配,因为那会违反 DRY(不要重复自己)的规则。这就是我认为可行的方法:

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

别介意love.graphics.newImage(),这只是我正在使用的框架中的一个功能。无论如何,有人可以帮忙吗?

提前致谢。

4

3 回答 3

3

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

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

考虑设置damage[i]

于 2013-06-23T20:13:30.610 回答
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
于 2013-06-23T20:28:11.223 回答
0

这不是最好的做法吗?

damages = {}

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

然后通过damages[0]、damages[1]调用。等等

于 2013-06-24T19:16:06.323 回答