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

Variables Lua函数选择局部变量而不是全局变量,variables,lua,global-variables,scope,Variables,Lua,Global Variables,Scope,我有一个本地I和一个全局I。函数g选择本地而不是全局。这是为什么 i=30 local i=1 g = function() i=i+1; print(i) 当你在做 i = 30 local i = 1 您正在使用值1定义一个新的全局变量i。在整个脚本中,此i将被视为全局代码。要访问真正的全局i,您必须提供环境(在本例中为\u G): 为了进一步解释这里发生的事情,请考虑以下代码: A.Lua < /C> >: i = 30 local i = 1 function t() re

我有一个本地
I
和一个全局
I
。函数g选择本地而不是全局。这是为什么

i=30
local i=1
g = function() i=i+1; print(i)
当你在做

i = 30
local i = 1
您正在使用值
1
定义一个新的全局变量
i
。在整个脚本中,此
i
将被视为全局代码。要访问真正的全局
i
,您必须提供环境(在本例中为
\u G
):


为了进一步解释这里发生的事情,请考虑以下代码:<代码> A.Lua < /C> >:

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

return _G
这里,我真正的全局变量是
i
t
。在
t()
中使用的
i
将是
本地i=1
。要查看其实际工作情况,请创建一个新文件
b.lua
,如下所示:

local a = require "a"
print( a.i, a.t() )
您将看到输出为:

30  1

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

Lua执行的每一段代码,例如交互式应用程序中的一个文件或一行 模式,称为块

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

将“块”替换为“块”。块由一个块组成。但其他语法结构会创建嵌套块,最明显的是函数定义。还有很多,包括的,其中控制变量是块内的局部变量。局部变量的作用域从声明后的一点运行到声明它的块的末尾。请阅读以下内容:
30  1