Lua所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。
易整合语言(glue language)。
可扩展性;
简单;
高效率;
与平台无关。
1.Lua认为0和空串都是真,仅有false和nil为假。
lua 8种类型:number,string,function,nil,boolean,userdata,thread,table.
f={"a","b","c"}
list=nil
for line in f do
list={next=list,value=line}
end
lua 3种if语句:
if bool then
--body
end;
--
if bool then
--body
else
--body
end;
--
if bool then
--body
elseif bool then
--body
else
end;
lua for语句 2类:
for var=exp1,exp2,exp3 do
end;
exp3默认step=1
for i,v in ipairs(a) do
--对num进行遍历
end
for i,v in pairs(a)do
--对table进行遍历
end
o:func(n) <--> o.func(o,n)
unpack(a) --返回a的所有元素
unpack的lua代码实现:
function unpack的lua代码实现(t,i)
i=i or 1
if t[i] then
return t[i] ,unpack的lua代码实现(t,i+1)
end
end
()用来函数定义和使用,{}用来定义table,[]用来索引table元素。
tab={d=function ()
print("tab.d")
end}
function tab.a()
print("tab.a")
end
tab.c=function ()
print("tab.c")
end
for i,v in pairs(tab) do
tab[i]() or v()
end
table.sort( tab,function (a,b)
return a<b
end )
6.1闭包:
function newCounter()
local i = 0
return function ()
i=i+1
return i
end
end
c1=newCounter()
print(c1())
print(c1())
OldSin=math.sin
function math.sin( x )
return OldSin(x*math.pi/180)
end
尾调用。
7.1迭代器与闭包:
迭代器可以遍历集合的每一个元素。
function list_iter( t )
local i = 0
local n = table.getn(t) --lua5.2后 table.getn()已失效
return function ()
i=i+1
if i<=n then return t[i] end
end
end;
list_iter是一个工厂,每次调用他都会创建一个闭包(迭代器本身),闭包保存着内部局部变量(i,n,t).
list_iter中是返回t中的下一个元素值,直到nil。所以我们可以通过一个循环语句遍历list_iter迭代器
来达到遍历t中每一个元素的效果。
lua范性for的两种实现ipairs()的方式:
1:非闭包实现ipairs():
function iter(a,i ) --迭代器/迭代函数
i=i+1
if a[i] then
return i,a[i]
else
return nil
end
function aaa( tab ) --返回迭代函数(iter、状态常量(tab)、控制变量(0),将状态常量和控制变量作为参数调用迭代函数。
return iter,tab,0
end
tab={"zzz","bbb","de"}
for i,j in aaa(tab)do
print(i,j) --输出
end
-----------------------------------------------
2.闭包实现ipairs()
function bbb( tab )
local i = 0 --作为下面匿名函数的upvalue,和下面匿名函数共同构成一个闭包。
return function ()
i=i+1
if tab[i] then
return i,tab[i]
else
return nil
end
end
end
for i,j in bbb(tab)do
print(i,j) --输出
end