Lua基础004.

来源:互联网 发布:麦吉尔大学商学院知乎 编辑:程序博客网 时间:2024/06/10 22:43

类似于委托

function testFunction(tab,fun)--fun相当于方法的委托    for k,v in pairs(tab) do        fun(k,v);       end endtabF={keya="a",keyb="b"}function f1(k,v) print(k.."  and  "..v);endtestFunction(tabF,f1);testFunction2(tabF,function(k,v)  print(k.."..匿名函数and.."..v) end)--匿名函数就是没有方法名,若函数代码较长的话,不宜写在匿名中,定义好方法供其使用

方法的可变参数

function test(a,...)--可变参数    print(#arg)    for k,v in pairs(arg) do--arg 是个table,最后一个key是n,value就是arg的个数    print(k,v)     endendtest()test(10)test(10,20,30,40)

–循环使用 while for (repeat until)

a=1while (a<=20) do    print("while循环有"..a)    a=a+1    if (a%5==0) then        print("5的倍数"..a)    endendtab={1,2,3,5}for i=1,#tab,1 do    print("for 循环有.."..tab[i])endfor k,v in pairs(tab) do    print(k.." for 循环有.."..v)enda=1repeat--先循环一次,再去until里判断    print("repeat unitl "..a);    a=a+1until(a==5)

局部变量与

function funVar()    local var="cccc"    bfff=10endfunVar()print(var)--nilprint(bfff)--10--虽然在方法体里,定义的,但也是全局变量ab,cd=10,50print(ab,cd)-->10,50ab,cd=cd,ab--lua是先把值取出来,然后赋值print(ab,cd);-->50,10function getNums()    return 10,30enda=getNums();print(a);a,b=getNums();print(a,b)

模块.module

--这是using_module.lua文件require "module"print(module.name)module.func1();func2();--这里不能写成module.func2module.func3()--这是module.lua文件module={}module.name="module 的名字 ,相当于属性";module.func1=function()    print("module 的 方法 func1");endfunction func2()    print("方法2 func2");endfunction module.func3()    print("输出 module.func3");endreturn module;

__index

print("元表---------------------__index");mytable={"a","b","c"}--普通表mymetatable={__index=function(tab,key)    return "你使用的元表,所用的值为空 key="..key;    --print("元表--"..key);end};--元表mytable=setmetatable(mytable,mymetatable)print(mytable[2]);--bprint(mytable[5]);--你使用的元表,所用的值为空 key=5

__newindex

print("元表---------------------__newindex");tab1={"cc","ff","hh"};tetaTab={__newindex=function(tab,key,value)    print("元表在新建一个不存在的key才会进来这里");    rawset(tab,key,value)--把新值插入 end}tab1=setmetatable(tab1,tetaTab);tab1[1]="修改值"tab1[4]="新值"print(table.concat(tab1,"  :  "))

__add

print("元表---------------------a+b");a={"a","c","d"}b={"1",2,3}m_a={__add=function(oT,tT)    maxO=0    for k,v in pairs(oT) do        if(maxO<k) then            maxO=k;        end    end    for k,v in pairs(tT) do        maxO=maxO+1        table.insert(oT,maxO,v)    end    return oT;end}m_b={}setmetatable(a,m_a)setmetatable(b,m_b)v=a+bprint(table.concat(v,"  :  "))--a  :  c  :  d  :  1  :  2  :  3print(table.concat(a,"  :  "))--a  :  c  :  d  :  1  :  2  :  3

__tostring

print("++++++++++++++tostring")aa={"2",1223.44,44}m_aa={__tostring=function(m_tab)   --return table.concat(m_tab," : ")--输出所有值   local strs=""--跟上面一样的效果   for k,v in pairs(m_tab) do   strs=strs..v..":"   endreturn strsend} setmetatable(aa,m_aa)print(aa)--2:1223.44:44