Использование локальной переменной вне ее чанка в Lua? - PullRequest
1 голос
/ 25 марта 2020

У меня есть вложенное 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?

1 Ответ

1 голос
/ 26 марта 2020

Технически ответ: нет , вы не можете использовать локальную переменную вне ее области видимости, в этом весь смысл локальных переменных. Однако вы можете просто изменить область видимости переменной, объявив ее вне блока, в котором вы ее используете:

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
...