1、Lua的保留字
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
注意:Lua 是大小写敏感的.
注释:单行注释:--
多行注释:--[[ --]]
2、Lua 8种基本类型
nil、boolean、number、string、userdata、function 、thread 和table
2.1、Booleans:除了false 和nil为假,其他值都为真。所以 Lua 认为0 和空串都是真
2.2、Numbers:4 0.4 4.57e-3 0.3e12 5e+20
2.3、Strings:可以使用单引号或者双引号表示字符串
转义序列:
\a bell
\b back space -- 后退
\f form Feed -- 换页
\n newline -- 换行
\r carriage return -- 回车
\t horizontal tab -- 制表
\v vertical tab
\\ backslash -- "\"
\" double quote -- 双引号
\' single quote -- 单引号
\[ left square bracket -- 左中括号
\] right square bracket -- 右中括号
字符串中使用\ddd (ddd 为三位十进制数字)方式表示字母
使用[[...]]表示字符串。这种形式的字符串可以包含多行也,可以嵌套且不会解释转义序列
Lua 会自动在string 和numbers 之间自动进行类型转换:
print("10" + 1) --> 11
print(10 .. 20) --> 1020
tonumber()、tostring()
3、关系运算符
nil只和自己相等
Lua 通过引用比较 tables 、userdata、functions 。也就是说当且仅当两者表示同一个对象时相等
a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a
a==c but a~=b
特别注意:
"0" == 0 -- false
2 < 15 -- true
"2" < "15" -- false (alphabetical order!)
为了避免不一致的结果,混合比较数字和字符串,Lua 会报错,比如:2 < "15"
4、逻辑运算符
a and b -- 如果a 为false ,则返回 a,否则返回 b
a or b -- 如果a 为true,则返回 a,否则返回 b
一个很实用的技巧:如果x 为false 或者nil则给x 赋初始值v
x = x or v
C 语言中的三元运算符a ? b : c,在Lua中是(a and b) or c
not 的结果一直返回 false 或者true
5、连接运算符
.. --两个点
6、优先级
从高到低的顺序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
7、表的构造
days = { "Sunday","Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday" }
print(days[4]) --> Wednesday
第一个元素的索引为1
如果想初始化一个表作为record 使用可以这样:
a = {x=0,y=0} <--> a = {}; a.x=0; a.y=0
list 风格初始化和 record 风格初始化是这种一般初始化的特例:
{x=0,y=0} <--> {["x" ]=0,["y" ]=0}
{"red","green","blue"} <--> {[1]="red",[2]="green",[3]="blue"}
8、赋值语句
a,b = 10,2*x <--> a=10; b=2*x
x,y = y,x -- swap 'x' for 'y'
当变量个数和值的个数不一致时,Lua 会一直以变量个数为基础采取以下策略:
变量个数>值的个数 按变量个数补足 nil
变量个数<值的个数 多余的值会被忽略
9、局部变量与代码块
local 创建一个局部变量
我们给block划定一个明确的界限:do..end 内的部分
10、控制结构语句
10.1、if 语句,有三种形式:
if conditions then
then-part
end ;
if conditions then
then-part
else
else-part
end ;
if conditions then
then-part
elseif conditions then
elseif-part
.. --->多个elseif
else
else-part
end ;
10.2、while语句
while condition do
statements;
end ;
10.3、repeat-until 语句
repeat
statements;
until conditions;
10.4、for 语句有两大类
数值for循环
for var=exp1,exp2,exp3 do
loop-part
end
控制变量 var 是局部变量自动被声明,并且只在循环内有效
范型for 循环
for i,v in ipairs(a) do print(v) end
10.5 break和return语句
Lua 语法要求 break和return 只能出现在 block的结尾一句(也就是说:作为 chunk
的最后一句,或者在end 之前,或者 else 前,或者 until 前)
11、函数
function func_name (arguments-list)
statements-list;
end ;
print((foo0())) --> nil
print((foo1())) --> a
print((foo2())) --> a
特殊函数unpack ,接受一个数组作为输入参数,返回数组的所有元素
虚变量(下划线)
local _,x = string.find(s,p)
print(select(1,string.find( "hello hello"," hel"))) --> 6 print(select(2," hel"))) --> 9