重启,感觉还是要把知识点都记录下来,才能知道自己会什么,不会什么。下面是lua5.1
一:语法。
1,命名规范:lua区分大小写,不能用关键字
2,类型和值:动态类型。值的类型可变 例: var = 20, var = “HelloWorld”。
8种基本类型:
(1)nil——空,
(2)boolean——布尔,
(3)number,——数字,
(4)string——字符串
(5)function——函数,
(6)table——表,
(7)userdata(自定义数据类型),
(8)thread(线程)
(1)nil 空 任何变量未赋值前皆为nil,给全局变量赋值nil表示删除该变量
(2)boolean true false
在lua中只有false 和 nil 表示假,其他情况都为真,数字0也为真。
(3)number:实数,整型和浮点型都可以。a=10,b=50.2,c=5e30
(4)string:字符串,
连接符"..",比如:print("Hello" .. "world"),
“#” 获取字符串长度 a="Helloworld" print(#a)
(5)table:t = {a = "test",b="test2"}
3,表达式
(1)算术表达式:+,-,*,/,%(取模),负号
(2)关系运算符:<,>,<=,>=,~=(不等于),==(等于)
(3)逻辑运算符:
and(与),第一个操作数为假时,返回第一个操作数,否则返回第二个操作数,
or(或),第一个操作数为真时,返回第一个操作数,否则返回第二个操作数,
not(非)
(4)table构造式:
t={}
a={x=10,y=10}
t={} t[1] = "Sunday" t[2] = "Monday"
t = {
name = "美女"
age = 18,
"美女背后的男人1"
“美女背后的男人2”
}
这个等价于
t ={}
t.name = "美女"
t.age = 10
t[1] = "美女背后的男人1"
t[2] = “美女背后的男人2”
删除一个table 赋值nil就可以了,t[1] = nil
4,语句
1)赋值语句
a = 20
a,b = 10,20
a,b= b,a
2)局部变量
local 关键字
3)控制语句
(1)if...then...else语句
if...then...
else if..then..
else
end
(2)while语句
while a<5 do
a = a+1
end
(3)repeat...until语句,类似于do...while
local i = 0
repeat
i = i+1
print(i .. ",")
until i>3
-- -- 输出未1,2,3,4
(4) 泛型for循环,使用迭代器(iterator)函数来遍历所有值
io,lines 用于遍历每行,paris用于迭代table,ipairs 用于迭代数组元素,string,match用于迭代字符串中单词
eg:
days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for k,v in pairs(days) do
print(v)
end
5,函数
(1)函数定义
function func() end
func = function() end
function class.fun1() end 等价于 function class.fun1(self) end
function class:fun2() end 等价于 function class:fun2() end
使用“:”定义的函数会自动传入一个名为self的变量,表示当前对象的指针;而"."定义的函数没有"self"
(2)函数参数与返回值
return返回一个函数的返回值。function foo() return 30,50 end
return f() 这样的语句会把所有返回值都返回,return (f()) 只返回一个结果
unpack函数,接受数组为参数,从下标开始返回该数组所有元素
e.g.:print(unpack{10,20,30}) -- --> 10,20,30
a,b = unpack{10,20,30} ----> a=10,b=20,30被丢弃
3)可变参数
function add(...)
参数表中的3个点(...)表示函数可以接受不同数量的实参
4)闭包函数:一个函数写在另一个函数之内