Lua学习笔记(二)
- 变量
- 赋值语句
- 多变量赋值
- 索引
- 循环
- 控制语句
- 流程控制
- 函数
- 可变参数
- 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 其它运算符
- 优先级
- 字符串
- 转义字符
- 字符串操作
- 字符串格式化
- 匹配模式
- 模式
- 捕获
- 数组
- 迭代器
- 泛型for迭代器
- 无状态迭代器
- 多状态迭代器
- table
- 操作方法
变量
使用前必须 申明 ,即创建该变量。
包括: 全局变量,局部变量,表中的域。
前文中提到过,Lua中所有的变量默认都是全局变量,有一种情况是例外的,那就是用local显示声明为局部变量的。
试尝试:
1
2
3
4
5
6
7
8
9
10
11
a=1;
local b = 2;
function test()
c=3;
local d=4;
end
test()
print("a"..a)
print("b"..b)
print("c"..c)
print(d)
—|—
这里经过试验可以轻易的得知,local定义的变量的使用范围就是在当前的代码块儿之内的。一旦超出的话就直接归nil!
这里使用到了Lua中的一些语法,例如function与end,这里就不一一的详细描述了,后面会讲到。
赋值语句
多变量赋值
在Lua中,多个变量可以一同赋值。(两边的数量相同时)
1
2
3
a,b="hello","world"
print(a)
print(b)
—|—
结果为:
1
2
hello
world
—|—
当变量的个数不等于赋值个数的时候?
1
2
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
—|—
注意,当函数返回多个值的时候,可以直接使用多变量赋值:
1
a,b=fun()
—|—
这里的话返回的多个值会直接赋值给前面的变量。
索引
对table表的使用索引主要就是包括了两种:
1
2
3
4
5
6
site={}
site["key"]="thbelief"
--第一种方法
print("第一种"..site["key"])
--第二种方法
print("第二种"..site.key)
—|—
输出结果:
1
2
第一种thbelief
第二种thbelief
—|—
循环
循环类型 | 描述
—|—
while 循环 | 在条件为 true
时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
for 循环 | 重复执行指定语句,重复次数可在 for
语句中控制。
repeat…until |
重复执行循环,直到 指定的条件为真时为止
循环嵌套 |
可以在循环内嵌套一个或多个循环语句(while do … end;for … do … end;repeat … until;)
控制语句
Break:退出当前循环或语句。
流程控制
需要特别注意,在Lua中0是true。
在Lua中,只有nil和false为假!
if语句、if…else语句、if的嵌套语句。
函数
Lua中函数的定义:
1
2
3
4
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
—|—
- optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local 。
- function_name: 指定函数名称。
- argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
- function_body: 函数体,函数中需要执行的代码语句块。
- result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
可变参数
和c语言类似,Lua中用 … 表示函数有可变的参数。
- select(‘#’, …) 返回可变参数的长度
-
select(n, …) 用于访问 n 到 select(‘#’,…) 的参数
1
2
3
4
5
6
7
8
9
function add(...)--这里使用...表示可变参数
local s=0
for i,v in ipairs{...} do
s=s+v
end
print("可变参数数量:"..select("#", ...))
return s
end
print(add(1,2,3,4))
—|—
运算符
算术运算符
操作符 | 描述 | 实例 |
---|---|---|
+ | 加法 | A + B 输出结果 30 |
- | 减法 | A - B 输出结果 -10 |
* | 乘法 | A * B 输出结果 200 |
/ | 除法 | B / A w输出结果 2 |
% | 取余 | B % A 输出结果 0 |
^ | 乘幂 | A^2 输出结果 100 |
- | 负号 | -A 输出结果v -10 |
由于太简单了,这里就不写例子了。
关系运算符
操作符 | 描述 | 实例 |
---|---|---|
== | 等于,检测两个值是否相等,相等返回 true,否则返回 false | (A == B) 为 false。 |
~= | 不等于,检测两个值是否相等,相等返回 false,否则返回 true | (A ~= B) 为 true。 |
> | 大于,如果左边的值大于右边的值,返回 true,否则返回 false | (A > B) 为 false。 |
< | 小于,如果左边的值大于右边的值,返回 false,否则返回 true | (A < B) 为 true。 |
>= | 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false | (A >= B) 返回 false。 |
<= | 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false | (A <= B) 返回 true。 |
这里需要注意的就是~=,和其它高级语言使用的!=不同, Lua中用~=表示不等于。
逻辑运算符
操作符 | 描述 | 实例 |
---|---|---|
and | 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 | (A and B) 为 false。 |
or | 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 | (A or B) 为 true。 |
not | 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 | not(A and B) 为 true。 |
其它运算符
操作符 | 描述 | 实例 |
---|---|---|
.. | 连接两个字符串 | a..b ,其中 a 为 “Hello “ , b 为 “World”, 输出结果为 “Hello World”。 |
# | 一元运算符,返回字符串或表的长度。 | #”Hello” 返回 5 |
这两个其它运算符之前提过,这里就不详细描述了。
优先级
1
2
3
4
5
6
7
8
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
—|—
字符串
转义字符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
a | 响铃(BEL) | 007 |
b | 退格(BS) ,将当前位置移到前一列 | 008 |
f | 换页(FF),将当前位置移到下页开头 | 012 |
n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
r | 回车(CR) ,将当前位置移到本行开头 | 013 |
t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
v | 垂直制表(VT) | 011 |
代表一个反斜线字符’’’ | 092 | |
’ | 代表一个单引号(撇号)字符 | 039 |
” | 代表一个双引号字符 | 034 |