1:注释
单行注释 -- 相当于 //
多行注释 --[[ ]] 相当于 /* */
2:基础知识
2.1 语句之间可以使用 ";" 或者空白隔开(多个语句如果写在同一行的话用分号隔开)
2.2 string 的连接使用 .. 相当于 + ; string的声明使用 双引号或者单引号括起来
2.3 流程控制
条件控制:if 条件 then … elseif 条件 then … else … end
While循环:while 条件 do … end
Repeat循环:repeat … until 条件
For循环:for 变量 = 初值,终点值,步进 do … end
For循环:for 变量1,变量2,… ,变量N in表或枚举函数 do … end --下一篇文章后面参考for循环详解
2.4 语句块使用 do end 相当于 { }
2.5 可以支持同时多赋值语句 a, b, c, d = 1, 2, 3, 4
2.6 变量默认为全局变量,定于局部变量使用local 关键字
2.7 数值运算符 支持乘方运算符号 ^ 例如:2^3 = 8
2.8 比较运算符 ~= 相当于 !=
2.9 逻辑运算符
and, or, not
其中,and 和 or 与C语言区别特别大。
在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
a and b:如果a为false,则返回a;否则返回b
a or b:如果 a 为true,则返回a;否则返回b
举几个例子:
print(4 and 5) --> 5
print(nil and 13) --> nil
print(false and 13) --> false
print(4 or 5) --> 4
print(false or 5) --> 5
在Lua中这是很有用的特性,也是比较令人混洧的特性。
我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
最有用的语句是: x = x or v,它相当于:if not x then x = v end 。
3.0 关键字
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
3.1 变量类型
怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种:
Nil 空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。
Boolean 布尔值
Number 数值,在Lua里,数值相当于C语言的double
String 字符串,如果你愿意的话,字符串是可以包含'\0'字符的
Table 关系表类型,这个类型功能比较强大,我们在后面慢慢说。
Function 函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。
Userdata 嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。
Thread 线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。如果感兴趣的话,可以去看看Lua的文档。
三:表类型 Table
3.1 可以使用任意的类型来作为数组的索引 除了nil
3.2 可以使用任意的类型来作为数组的索引 除了nil
3.3 所有的元素使用 , 隔开
3.4 所有索引值都需要使用 [] 括起来,如果是中字符串可以去掉引号和中括号
3.5 如果不写索引,则会被认为是数字序,并自动加1
使用表之前必须先定义
T1 = {}
T1[1] = 10
T1["john"] = {Age = 27, Gender = "Male"}
也可以这样 T1["john"] = {} ; T1["john"]["Age"] = 27; T1["john"]["Gender"] = "Male";
整个表还可以这样定义
T1
{
10, -- 相当于[1] = 10
john
{
age = 27,
Gender = "Male"
},
20 -- 相当于[2] = 20
}
例子:
T1 =
{
10,
John =
{
name = "hello",
age = 10,
birthday = '2000-10-10'
},
30
}
function printTable(table)
if (table~=nil) then
for key, var in ipairs(table) do
print(key.." , " .. var)
end
end
for key2, var2 in pairs(table) do
if type(var2) == 'table' then
printTable(var2)
else
print(key2.." , " .. var2)
end
end
end
printTable(T1)
四:方法 Function
4.1:方法也是一个变量,可以支持任意参数使用...来定义
比如 function sum(a, b,...)
--可变参数的打印方式1
function sum(a,b,...)
print(a..','..b)
for var = 1, arg.n do
print(arg[var])
end
end
--可变参数的打印方式2
function sum2(a,b,...)
print(a..','..b)
for index=1,select("#", ...) do
local temp = select(index, ...)
print(temp)
end
end
sum2(1,2,3,5,'c')
4.2方法支持多个返回值
--方法支持多个返回值
function returnPara(a,b,...)
return a,b,..., a+b+...
end
print(returnPara(1,2,3,4)
--打印如下1 2 3 6