Lua函数使用局部变量而不是全局变量。

我有一个本地变量 i 和一个全局变量 i。函数 g 选择了本地变量而不是全局变量。为什么会这样?

i=30
local i=1
g = function() i=i+1; print(i)
点赞
用户1190388
用户1190388

当你执行以下代码时:

i = 30
local i = 1

你定义了一个新的全局变量i,其值为1。这个i将在你的脚本中被视为全局变量。要访问真正的全局i,你需要提供环境(在本例中为_G):

function g()
  _G.i = _G.i + 1
  print(_G.i)
end

为了更好地解释这里发生的情况,请考虑以下名为a.lua的脚本:

i = 30
local i = 1
function t()
  return i
end

return _G

在这里,我的真正的全局变量是itt()中使用的i将是local i = 1。要查看它的实际操作,请创建一个名为b.lua的新文件如下:

local a = require "a"
print(a.i, a.t())

然后你将看到输出为:

30 1
2014-03-29 08:39:43
用户1282919
用户1282919

我认为“local”这个词误导了你。根据 Lua 中的词法作用域概念,当定义一个局部变量时,它将影响整个代码块。什么是代码块?根据《Lua 程序设计》:

Lua 执行的每一段代码,例如一个文件或交互模式下的单行代码,都叫做代码块。

因此,这里的局部变量是“i”,它在这个文件中起作用,无论在函数或其他地方被调用,它的优先级都高于同名全局变量在代码块中的优先级。

2014-03-29 09:28:10