本文总结了Lua数据类型,表达式,基本语法。
Lua单行注释: --
多行注释:--[[ --]]
全局变量:不需要声明,访问一个没有初始化的全局变量也不会出错,只是结果是nil。删除一个全局变量,只给他赋值nil,即b=nil。
Lua数据类型(8种):nil,boolean,number,string,undata,function,thread,table
函数type 可以判断变量或指定值的类型,
如: print(type("hello lua ")) --> string
print(type(type)) --> function
Nil: 一个全局变量赋值之前默认是nil,给全局变量赋nil 可以删除该变量
Boolean: Lua中所有的值都可以作为条件。在控制结构中,除了false和nil为假,其余都为真,如
0 和空串都是真。
Numbers: 实数,Lua中没有整数。Lua中可以处理任何长整数,不用考虑误差。
Strings: 指字符的序列。string和其他对象一样,Lua自动进行内存分配和释放。
Lua可以高效的处理长字符串,1M的字符串很常见。
Lua可以使用单引号或双引号表示字符串,不过最好使用一种,除非两种引号嵌套的情况。
还可以使用[[---]] 表示字符串,这种方式可以包含多行。可以嵌套且不会解释转义序列。如果第一个字符是换行会自动忽略。
这种方式的字符串用来包含一段代码是非常方便的。
number与string的转换:
Lua会自动在string和number之间自动转换,当一个字符串使用算术运算符时,string就会被转成数字。
如:
print("10" + 1 ) --> 11 print("hello" + 1 ) -- ERROR(cannt convert "hello")
数字转换成string,使用字符串连接符。。,当在数字后面加。。时必须加上空格,以免被解释错。
如:print(10 .. 20) --> 1020
显示地转换:使用tostring() ,tonumber()
Functions:函数和其他类型一样,可以存储在变量中,可以作为函数的参数,已可以是函数的返回值
UserData和Thread:
userdata可以将C数据放入Lua变量中,userdata只有赋值和相等比较操作。
表达式:
逻辑运算:and or not
关系运算:== ~=
如果两个值类型不同,会返回false。
Lua通过引用比较tables,userdata和thread,当且仅当两者是同一对象时相等。
特殊的地方:只有false和nil 被认为是假
print(4 and 5 ) --> 5
print(nil and 13) --> false
print(false and 13) --> false
print(4 or 5 ) --> 4
print(false or 5) --> 5
x = x or v; 一个很实用的技巧,当x为false或nil时,将v赋给x
C语言中的三元运算 a ? b : c , 在Lua中等价于:(a and b) or c
字符串连接运算: “hello”。。“ lua”
table的构造:
Example1:
days = {"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
print(days[4]) --> wednesday
Example2:
a = {x = 0 , y = 0}
等价于:a = {} a.x = 0 , a.y = 0
基本语法:
赋值语句:Lua可同时为多个变量赋值,以逗号分隔。如: x ,y = y, x 交换两个变量的值。
局部变量和代码块: 使用local创建局部变量。访问局部变量的速度比全局变量快。
可以添加do。。end 来控制局部变量的作用范围。
控制结构语句:
条件语句:
if condition1 then
statement1
elseif condition2 then
statement2
else
statementn
end;
while循环:
while condition do
statements;
end;
repeat-until循环:
repeat
statements;
until condition;
for循环有两大类:
1. 数值for循环:
for var = exp1,exp2,exp3 do (exp3可以省略,默认step=1)
loop- part;
end;
举例:
local found = nil;
for i=1,a.n do
if a[i] == value then
found = i;
break;
end;
end;
2.
泛型for循环:
【待以后专门总结】
break语句:退出for,repeat,while循环
return语句:返回结果