【问题标题】:Lua function picking local variable instead of globalLua函数选择局部变量而不是全局变量
【发布时间】:2014-03-29 06:55:49
【问题描述】:

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

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

【问题讨论】:

标签: variables lua global-variables scope


【解决方案1】:

当你在做的时候

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

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

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

你会看到输出是:

30  1

【讨论】:

    【解决方案2】:

    我认为“本地”在误导您。根据 lua 中的 Lexical Scope 概念,当定义一个局部变量时,它会影响整个块。什么是块?根据 Lua 编程:

    Lua 执行的每一段代码,比如一个文件或者交互中的一行 模式,称为块

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

    【讨论】:

    • 将“块”替换为“块”。一个块由一个块组成。但其他句法结构创建嵌套块,最值得注意的是函数定义。还有更多,包括for,其中控制变量是块内的局部变量。局部变量的作用域是从声明后的点到声明它的块的末尾。
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2021-06-20
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多