我if
在Lua有一个巢。我在第二if
层中有一个要在第一层中使用的变量。
变量是npcSpecimen
。
if conditions then
local npcType = util.pickRandom(self.npcTypes)
local npcSpecimen = ""
if npcType == "spacebandit" then
local npcSpecimen = util.pickRandom(self.npcSpecies)
else
local npcSpecimen = util.pickRandom(self.npcSpeciesMutant)
end
local npcId = space.spawnNpc(spawnPosition, npcSpecimen, npcType)
end
如果以这种方式编写,npcSpecimen
则将保持为空,因为在内部设置的变量if npcType
仅保留在该块内。因此,为了缓解这种情况,我可以改用全局变量:
if npcType == "spacebandit" then
npcSpecimen = util.pickRandom(self.npcSpecies)
else
npcSpecimen = util.pickRandom(self.npcSpeciesMutant)
end
但是,根据文档,使用全局变量不是最佳实践,而且速度较慢。
那么解决这个问题的最佳方法npcSpecimen
是npcId
什么呢?
从技术上讲,答案是“否”,您不能在范围之外使用局部变量,这就是局部变量的重点。但是,您可以通过在使用变量的块外声明变量来更改变量的范围:
local foo
if io.read() == "hello" then -- Just a dumb example condition :)
foo = "hello" -- This is not a global, as it was declared local above
end
print(foo)
但是,请注意以下内容不起作用,或者更确切地说,与上面的功能不同:
local foo
if io.read()=="hello" then
local foo = "hello" -- This is another local
end
print(foo) -- This will *always* print nil
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句