Lua学习笔记(二)

2.8k 词

变量

使用前必须申明,即创建该变量。

包括:全局变量,局部变量,表中的域。

前文中提到过,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, …) 用于访问 nselect(‘#’,…) 的参数
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