If statement 在Lua的块外使用局部变量?
我在Lua中有一个嵌套的If statement 在Lua的块外使用局部变量?,if-statement,variables,lua,local-variables,If Statement,Variables,Lua,Local Variables,我在Lua中有一个嵌套的if。我想在第一层中使用的第二层if中有一个变量 变量为npcSpecimen if conditions then local npcType = util.pickRandom(self.npcTypes) local npcSpecimen = "" if npcType == "spacebandit" then local npcSpecimen = util.pickRandom(self.n
if
。我想在第一层中使用的第二层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
?从技术上来说,答案是否,你不能使用超出其范围的局部变量,这就是局部变量的全部要点。但是,您可以通过在使用变量的块之外声明变量来更改变量的范围:
localfoo
如果io.read()==“hello”,那么——只是一个愚蠢的示例条件:)
foo=“hello”--这不是全局的,正如上面声明的本地的那样
结束
打印(foo)
但是,请注意,以下命令不起作用,或者更准确地说,与上述命令不起作用:
localfoo
如果io.read()=“你好”,那么
local foo=“hello”--这是另一个本地
结束
打印(foo)--这将*始终*打印为零
只需将本地npcSpecimen=
替换为npcSpecimen=
。由于变量的定义local npcSpecimen=“
谢谢,所以变量保持为本地变量!