我有一个本地i
和一个全球i
。函数g选择局部而不是全局。为什么?
i=30
local i=1
g = function() i=i+1; print(i)
答案 0 :(得分:2)
当你做
时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
的脚本:
i
在这里,我真正的全局变量是t
和i
。 t()
内使用的local i = 1
将是b.lua
。要查看它确实有效,请按以下步骤创建新文件local a = require "a"
print( a.i, a.t() )
:
30 1
您将看到输出为:
{{1}}
答案 1 :(得分:1)
我认为'本地'误导了你。根据lua中的词法范围概念,当定义局部变量时,它将影响整个块。什么是块?根据Lua编程:
Lua执行的每段代码,例如交互式文件或单行代码 模式,称为块
所以局部变量,这里是' i',在这个文件中工作,无论它是在函数还是其他地方调用,并且它的优先级高于此块中具有相同名称的全局变量。