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
阅读全文
0 0
- Lua基础004.
- Lua基础 初识Lua
- LUA基础
- Lua 基础
- Lua 基础
- lua基础
- lua基础
- lua基础
- lua基础
- lua基础
- Lua基础
- lua基础
- Lua基础
- Lua基础
- Lua基础
- lua基础
- Lua基础
- lua基础
- 30muduo_net库源码分析(六)
- ORA-01653无法通过128扩展
- 哈哈日语入门:日语中浊音变的3条规律
- JavaWeb(九)AJAX
- 使用JavaScript实现表单的前端简单验证后提交
- Lua基础004.
- 大神手把手教你:(Python)序列数据的One Hot编码
- junit单元测试
- 【Leetcode】ZigZag Conversion
- linux启动openoffice4服务报错:no suitable windowing system found, exiting.问题
- URL和URI的区别
- 理解MySQL——索引与优化
- 分解质因数
- MFC指定对话框最大最小大小