OpenResty完全开发指南:构建百万级别并发的Web应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5 变量

Lua语言里的变量有作用域的概念,分为局部变量和全局变量,名字区分大小写。

局部变量需要使用关键字“local”声明,作用域仅限本代码块(文件内或语句块内),没有关键字“local”声明的变量都是全局变量,而且不需要声明就可以直接使用:

x = 1                             -- 使用一个全局变量x,赋值为1,全局可见
local str = 'matrix'              -- 使用一个局部变量str,仅此文件内可见
do                                -- 开始一个代码块
    local pi = 3.14               -- 局部变量pi,仅在此代码块内可见
end                               -- 代码块结束
print(type(pi))                   -- 局部变量pi消失,访问的是全局变量pi

变量如果没有显式赋值,那么它的值就是nil,所以代码的最后一行会输出“nil”。

在Lua里应当尽量少使用全局变量,多使用局部变量。局部变量不仅很好地控制了变量的作用域,避免全局名字冲突,而且因为“局部化”,解释器查找的速度也更快。实际上Lua全局变量存放在一个名为“_G”的表里。

一个比较常用的全局变量是:“_”(下画线,也是合法的变量名),通常当作“占位符”,在不想专门起名来保存某些值时就可以使用“_”来暂存并忽略。

Lua语言里没有“常量”,实践中我们通常用全大写名字的变量来表示常量,例如:

local MAX_COUNT = 1000           -- 全大写的变量,提醒开发者应该当作常量来使用