Lua:02---Lua语法命名规范、;号的使用、Lua注释、Lua全局变量/局部变量、do-end代码块

Lua 专栏收录该内容
10 篇文章 3 订阅

一、Lua语法命名规范

  • Lua语言对大小写是敏感的

标识符命名规则

  • Lua语言中的标识符(或名称)可以由:任意字母、数字、下划线组成,但是不能以数字开头
  • 例如下面都是符合规则的命名
i

i10

_ij

aSomeWthaLongName
  • 其中以“下划线+大写字母”组成的标识符通常被Lua语言用作特殊用途,应该避免使用。例如:
_VERSION

Lua的保留字

  • 下面是Lua语言的保留字,不能用作标识符

二、分号的使用

  • 在Lua语言中,分号的使用是可选的
  • 例如,下面的使用都是正确的
a = 1
b = a * 2

a = 1;
b = a * 2;

a = 1; b = a * 2

a = 1 b = a * 2   -- 不推荐使用这一种

三、Lua注释

单行注释

  • 两个连续的连字符(--)为单行注释,单行注释可以放在一行代码的后面
  • 例如:
-- 单行注释

a = 15  --将a设置为15

print("Hello World")  -- 打印a

多行注释

  • 多行注释的格式为:使用两个连续的连字符(--),后面加上两对方括号
  • 例如:
--[[
    下面的程序将a设置为15
    然后再打印a
]]

a = 15

print("Hello World")
  • 使用技巧:在使用多行注释时,可以将代码放在多行注释内;当需要再次启用注释中的代码时,可以在开头加上一个"-"号,在注释结尾加上"--"号
--[[
    print("Hello World") --这行代码被注释了
]]


---[[
    print("Hello World") --这行代码重新生效
--]]
--[==[
    自定义多行注释
]==]

--[===[
    自定义多行注释
]===]

四、Lua全局变量

  • 在Lua中,全局变量无须声明即可使用
  • 使用未初始化的全局变量时,得到的结果是nil

  • 把nil赋值给全局变量时,Lua会回收该全局变量

  • Lua语言不区分未初始化变量和被赋值为nil的变量。因为其两者最终丢回回收该变量占用的内存

五、Lua局部变量

  • 与全局变量不一样,局部变量的生效范围仅限于声明它的代码块(一个代码块是一个控制结构的主题,或是一个函数的主题,或是一个代码段(即变量被声明时所在的文件或字符串))
  • 局部变量会覆盖全局变量
  • 例如:
x = 10       -- 全局变量
local i = 1  -- 对于该代码段来说是局部的, 类似于C语言中的static全局变量

while i <= x do
    local x = i * 2  -- 局部变量x
    print(x)
    i = i + 1
end

if i > 20 then
    local x          -- 局部变量x
    x = 20
    print(x + 2)
else
    print(x)
end

print(x)  -- 操作全局的x

do-end代码块

  • 请注意,上面的代码在交交互式模式中不能正常运行。因为在交互模式下,每一行代码就是一个代码段(除非不是一条完整的命令)。一旦输入示例的第2行(local i = 1),Lua语言解释器就会直接运行它并在下一行开始一个新的代码段。这样,局部的声明就超出了原来的作用范围
  • 解决这个问题的一种方式是显式地声明整个代码块,即将它放入一对do-end代码块中
  • 一旦输入了do,命令就只在匹配到end时才结束,这样Lua语言解释器就不会单独执行每一行的命令
  • 当需要更好地控制某些局部变量的生效范围时,do程序块也同样有用:
local x1, x2
do
    local a2 = 2 * a
    local d = (b^2 - 4*a*c)^(1/2)
    x1 = (-b + d)/a2
    x2 = (-b - d)/a2
end       -- a2和d的声明周期在此结束
print(x1, x2)

局部变量与全局变量的比较

  • 局部变量相对于全局变量的优点:
    • 首先,局部变量可以避免由于不必要的命名而造成全局变量的棍乱
    • 其次,局部变量还能避免同一程序中不同代码部分中的命名冲突
    • 再次,访问局部变量比访问全局变量更快
    • 最后,局部变量会随着其作用域的结束而消失,从而使得垃圾收集器能够将其释放
  • 鉴于局部变量优于全局变量,有些人就认为 Lua 语言应该把变量默认视为局部的。然而,把变量默认视为局部的也有一系列的问题(例如非局部变量的访问问题)。一个更好的解决办法并不是把变量默认视为局部变量,而是在使用变量前必须先声明。 Lua语言的发行 版中有一个用于全局变量检查的模块strict.lua,如果试图在一个函数中对不存在的全局变量赋值或者使用不存在的变量变量 ,将会抛出异常。这在开发Lua语言代码时是一个良好的习惯

一种常见的用法

  • Lua中的一种常见用法如下:
foo = 1  -- 全局变量

do
    local foo = foo --局部变量
end
  • 这段代码声明了一个局部变量foo,然后用全局变量foo对其赋初值(局部变量foo只有在声明之后才能被访问)。这个用法在需要提高对foo的访问速度时很有用。当其他函数改变了全局变量foo的值,而代码段又需要保留foo的原始值时,这个用法也很有用,尤其是在进行运行时动态替换(monkey patching,猴子补丁)时。即使其他代码把print动态替换成 了其他函数,在local print = print语句之前的所有代码使用的还都是原先的print函数
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值