Lua函数选择局部变量而不是全局变量

时间:2014-03-29 06:55:50

标签: variables lua global-variables scope

我有一个本地i和一个全球i。函数g选择局部而不是全局。为什么?

i=30
local i=1
g = function() i=i+1; print(i)

2 个答案:

答案 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

在这里,我真正的全局变量是tit()内使用的local i = 1将是b.lua。要查看它确实有效,请按以下步骤创建新文件local a = require "a" print( a.i, a.t() )

30  1

您将看到输出为:

{{1}}

答案 1 :(得分:1)

我认为'本地'误导了你。根据lua中的词法范围概念,当定义局部变量时,它将影响整个块。什么是块?根据Lua编程:

  

Lua执行的每段代码,例如交互式文件或单行代码      模式,称为块

所以局部变量,这里是' i',在这个文件中工作,无论它是在函数还是其他地方调用,并且它的优先级高于此块中具有相同名称的全局变量。