1、变量
1.1 基础变量
Lua 变量有三种类型:全局变量、局部变量、表中的域。
Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
变量的默认值均为 nil。
1.2 变量赋值
1.2.1
Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
a, b = 1, 2 a=1; b=2
1.2.2
遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:
x, y = y, x
1.2.3
当变量个数和值的个数不一致时:
- 变量个数 > 值的个数 —— 按变量个数补足nil
- 变量个数 < 值的个数 —— 多余的值会被忽略
1.2.4
f()返回两个值,第一个赋给a,第二个赋给b:
a, b = f()
1.2.5
应该尽可能的使用局部变量,有两个好处:
- 避免命名冲突
- 访问局部变量的速度比全局变量更快
1.3 索引
table 的索引可以使用[],也可以使用.
table[i]
table[key]
table.key
2、逻辑语句
2.1 循环
2.1.1 循环语句
2.1.1.1 while
在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
2.1.1.2 for
重复执行指定语句,重复次数可在 for 语句中控制。
2.1.1.3 repeat…until
重复执行循环,直到 指定的条件为真时为止。
a = 10
repeat
print("a=", a)
a = a + 1
until( a > 15 )
2.1.1.4 循环嵌套
可以在循环内嵌套一个或多个循环语句(while do … end;for … do … end;repeat … until;)。
2.1.2 循环控制语句
2.1.2.1 break
退出当前循环或语句,并开始脚本执行紧接着的语句。
2.1.2.2 goto
将程序的控制点转移到一个标签处。
2.2 判断语句
控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。要注意的是Lua中 0 为 true。
2.2.1 if
由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
2.2.2 if…else
if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码。
2.2.3 if 嵌套
可以在if 或 else if中使用一个或多个 if 或 else if 语句 。
3. 函数
在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。
Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上,type()可以获取类型等。
Lua 函数主要有两种用途:
- 完成指定的任务,这种情况下函数作为调用语句使用;
- 计算并返回值,这种情况下函数作为赋值语句的表达式使用。
3.1 base
function f(v)
...
end
function f(v)
...
return v;
end
f = function(v)
...
return v;
end
3.2 多返回值
function f(v)
local v2 = v + 1
return v, v2
end
3.3 可变参
在函数参数列表中使用三点 … 表示函数有可变的参数。
function sum(...)
local s = {...}
local result = 0;
for index, value in ipairs(s) do
result = result + value
end
return result
end
print(sum(1,1,2))
print(sum(2,2,5,1))
有时候我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前:
function sum(v1, ...)
- select(’#’, …) 返回可变参数的长度。
- select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。
4、运算符
Lua提供了以下几种运算符类型:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 其他运算符
4.1 算术运算符
操作符 | 描述 | 备注 |
+ | 加法 | |
- | 减法/负号 | local a = 1 print(-a) |
* | 乘法 | |
/ | 除法 | 结果为number |
// | 整除 | >=lua5.3 |
% | 取余 | |
^ | 幂 |
4.2 关系运算符
操作符 | 描述 | 备注 |
== | 判断是否相等 | |
~= | 判断是否不相等 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
4.3 逻辑运算符
操作符 | 描述 | 备注 |
and | 与 | |
or | 或 | |
not | 非 |
4.4 Else
操作符 | 描述 | 备注 |
. . | 字符串连接符 | lua字符串连接不能用+ |
# | 一元运算符,返回字符串或表的长度 |
4.5 优先级
除了 ^ 和 … 外所有的二元运算符都是左连接的。
^ |
not -(负号) |
* / % |
+ - |
. . |
< > <= >= ~= == |
and |
or |