gpt4 book ai didi

if-statement - 在 Lua 中使用其 block 之外的局部变量?

转载 作者:行者123 更新时间:2023-12-03 08:47:25 25 4
gpt4 key购买 nike

我在 Lua 中有一个嵌套的 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 中设置的变量仅保留在该 block 内。因此,为了缓解这个问题,我可以使用全局变量来代替:

  if npcType == "spacebandit" then
npcSpecimen = util.pickRandom(self.npcSpecies)
else
npcSpecimen = util.pickRandom(self.npcSpeciesMutant)
end

但是根据 the documentation ,使用全局变量不是最佳实践,而且速度较慢。

那么解决这个问题的最佳方法是什么,以便我可以将 npcSpecimen 传递给 npcId

最佳答案

从技术上讲,答案是,您不能在其范围之外使用局部变量,这就是局部变量的全部要点。但是,您可以通过在使用变量的 block 之外声明它来更改变量的范围:

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

关于if-statement - 在 Lua 中使用其 block 之外的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com