Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 在Lua的块外使用局部变量?_If Statement_Variables_Lua_Local Variables - Fatal编程技术网

If statement 在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

我在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

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

localfoo
如果io.read()==“hello”,那么——只是一个愚蠢的示例条件:)
foo=“hello”--这不是全局的,正如上面声明的本地的那样
结束
打印(foo)
但是,请注意,以下命令不起作用,或者更准确地说,与上述命令不起作用:

localfoo
如果io.read()=“你好”,那么
local foo=“hello”--这是另一个本地
结束
打印(foo)--这将*始终*打印为零

只需将
本地npcSpecimen=
替换为
npcSpecimen=
。由于变量的定义
local npcSpecimen=“
谢谢,所以变量保持为本地变量!