如何在 Lua 中在其模块之外使用本地变量?

我在 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 中设置的变量仅在该块中保持。因此,为缓解这种情况,我可以使用全局变量:

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

然而,根据文档 ,使用全局变量不是最佳实践,而且会更慢。

那么,最好的方法是什么,以便我可以将 npcSpecimen 传递给 npcId

点赞
用户4984564
用户4984564

技术上来说,答案是 不可以,你不能在它的作用域之外使用一个局部变量,这正是局部变量存在的意义。但是,你可以通过在使用它的代码块之外声明它来改变变量的作用域:

local foo
if io.read() == "hello" then -- 一个简单的条件示例 :)
   foo = "hello" -- 这不是一个全局变量,因为它在上面被声明为局部变量
end
print(foo)

但是需要注意 以下代码不行,或者更准确地说,不与上面的代码做相同的事情:

local foo
if io.read() == "hello" then
   local foo = "hello" -- 这是另一个局部变量
end
print(foo) -- 这会 *总是* 打印nil
2020-03-26 14:42:00