目录

Lua初探-可见性规则


Visibleility Rules
  • Lua是一种词汇范围的语言。局部变量的范围从其声明后的第一个语句开始,一直持续到包含声明的最内层块的最后一个非void语句。请考虑以下示例:

    x = 10                -- global variable
     do                    -- new block
       local x = x         -- new 'x', with value 10
       print(x)            --> 10
       x = x+1
       do                  -- another block
         local x = x+1     -- another 'x'
         print(x)          --> 12
       end
       print(x)            --> 11
     end
     print(x)              --> 10  (the global one)
    
  • 请注意,在像x = x这样的声明中,声明的新x尚未在范围内,因此第二个x引用外部变量。

  • 因为词汇作用域规则,局部变量可以再被定义的函数范围内自由地访问。内部函数使用的局部变量在内部函数内称为upvalue或外部局部变量。

  • 请注意,每次执行本地语句都会定义新的局部变量。请考虑以下示例:

     a = {}
     local x = 20
     for i=1,10 do
       local y = 0
       a[i] = function () y=y+1; return x+y end
     end
    
  • 循环创建十个闭包(即匿名函数的十个实例)。这些闭包中的每一个都使用不同的y变量,而所有闭包都使用相同的x。