Lua初探笔记(一)

来源:互联网 发布:文明6金钱修改器 mac 编辑:程序博客网 时间:2024/06/06 01:59
Lua所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。
易整合语言(glue language)。可扩展性简单高效率与平台无关

1.Lua认为0和空串都是真,仅有false和nil为假。

lua 8种类型:number,string,function,nil,boolean,userdata,thread,table.f={"a","b","c"}list=nilfor line in f dolist={next=list,value=line}endlua 3种if语句:if bool then--bodyend;--if bool then--bodyelse--bodyend;--if bool then--bodyelseif bool then--bodyelseend;lua for语句 2类:for var=exp1,exp2,exp3 doend;exp3默认step=1for i,v in ipairs(a) do--对num进行遍历endfor i,v in pairs(a)do--对table进行遍历endo:func(n) <--> o.func(o,n)unpack(a)  --返回a的所有元素unpack的lua代码实现:function unpack的lua代码实现(t,i)i=i or 1if t[i] thenreturn t[i] ,unpack的lua代码实现(t,i+1)endend()用来函数定义和使用,{}用来定义table,[]用来索引table元素。tab={d=function ()print("tab.d")end}function tab.a()print("tab.a")endtab.c=function ()print("tab.c")endfor i,v in pairs(tab) dotab[i]()  or v()endtable.sort( tab,function (a,b)return a<bend )6.1闭包:function newCounter()local i = 0return function ()i=i+1return iendendc1=newCounter()print(c1())print(c1())OldSin=math.sinfunction math.sin( x )return OldSin(x*math.pi/180)end尾调用。7.1迭代器与闭包:迭代器可以遍历集合的每一个元素。function list_iter( t )local i = 0local n = table.getn(t)  --lua5.2后 table.getn()已失效return function ()i=i+1if i<=n then return t[i] endendend;list_iter是一个工厂,每次调用他都会创建一个闭包(迭代器本身),闭包保存着内部局部变量(i,n,t).list_iter中是返回t中的下一个元素值,直到nil。所以我们可以通过一个循环语句遍历list_iter迭代器来达到遍历t中每一个元素的效果。
lua范性for的两种实现ipairs()的方式:1:非闭包实现ipairs():function iter(a,i )  --迭代器/迭代函数i=i+1if a[i] thenreturn i,a[i]elsereturn nilendfunction aaa( tab )  --返回迭代函数(iter、状态常量(tab)、控制变量(0),将状态常量和控制变量作为参数调用迭代函数。return iter,tab,0endtab={"zzz","bbb","de"}for i,j in aaa(tab)doprint(i,j)      --输出end-----------------------------------------------2.闭包实现ipairs()function bbb( tab )local i = 0  --作为下面匿名函数的upvalue,和下面匿名函数共同构成一个闭包。return function ()i=i+1if tab[i] thenreturn i,tab[i]elsereturn nilendendendfor i,j in bbb(tab)doprint(i,j)   --输出end



原创粉丝点击