lua语法
lua
语法
只记录重点内容,还有和编程语言在常规使用上的不同之处
变量
类型
Lua 变量有三种类型:全局变量、局部变量、表中的域。
Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
变量的默认值均为 nil。
1 | -- test.lua 文件脚本 |
应该尽可能的使用局部变量,有两个好处:
- 避免命名冲突。
- 访问局部变量的速度比全局变量更快。
空、NULL,null
在默认情况下,变量总是认为是全局的。
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil
1 | > print(b) |
如果想删除一个全局变量,只需要将变量赋值为nil。
空判断
nil 作比较时应该加上双引号 “:
1 | > type(X) |
type(X)==nil 结果为 false 的原因是 type(X) 实质是返回的 “nil” 字符串,是一个 string 类型:
1 | type(type(X))==string |
boolean
boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true:
与之不同的是,在编程语言,例如,C++和C#中,0是false
String
字符串拼接不使用 加号
相反,由 两个英文句号替代
1 | > print("a" .. 'b') |
加号字符串的运算中有,有着另外的作用
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字
1 | > print("2" + 6) |
索引
索引头
lua做出了一个违背祖宗的决定
不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。
不过是默认是,这个是可以自行指定的,
1 | array = {} |
Table是ua中的特殊类型
方括号调用
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
对 table 的索引使用方括号 []。Lua 也提供了 . 操作。
1 | t[i] |
循环
break 语句 | 退出当前循环或语句,并开始脚本执行紧接着的语句。 |
---|---|
goto 语句 | 将程序的控制点转移到一个标签处。 |
遗憾的是lua没有continue操作
面向对象
设置继承的关键在setmetatable和self.__index = self中
Table需要被声明后才能使用
同时对于方法的调用,需要通过实例加上英文的冒号 : ,来实现
1 | -- Meta class |
模块
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:
1 | -- 文件名为 module.lua |
自定义测试
名字叫做module的lua文件
1 | module = {} |
1 | module1 = require("module") --可以自定义名称 |