类似于委托
function testFunction(tab,fun)--fun相当于方法的委托
for k,v in pairs(tab) do
fun(k,v);
end
end
tabF={keya="a",keyb="b"}
function f1(k,v)
print(k.." and "..v);
end
testFunction(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)
end
end
test()
test(10)
test(10,20,30,40)
–循环使用 while for (repeat until)
a=1
while (a<=20) do
print("while循环有"..a)
a=a+1
if (a%5==0) then
print("5的倍数"..a)
end
end
tab={1,2,3,5}
for i=1,#tab,1 do
print("for 循环有.."..tab[i])
end
for k,v in pairs(tab) do
print(k.." for 循环有.."..v)
end
a=1
repeat--先循环一次,再去until里判断
print("repeat unitl "..a);
a=a+1
until(a==5)
局部变量与
function funVar()
local var="cccc"
bfff=10
end
funVar()
print(var)--nil
print(bfff)--10--虽然在方法体里,定义的,但也是全局变量
ab,cd=10,50
print(ab,cd)-->10,50
ab,cd=cd,ab--lua是先把值取出来,然后赋值
print(ab,cd);-->50,10
function getNums()
return 10,30
end
a=getNums();
print(a);
a,b=getNums();
print(a,b)
模块.module
--这是using_module.lua文件
require "module"
print(module.name)
module.func1();
func2();--这里不能写成module.func2
module.func3()
--这是module.lua文件
module={}
module.name="module 的名字 ,相当于属性";
module.func1=function()
print("module 的 方法 func1");
end
function func2()
print("方法2 func2");
end
function module.func3()
print("输出 module.func3");
end
return 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]);--b
print(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+b
print(table.concat(v," : "))--a : c : d : 1 : 2 : 3
print(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..":"
end
return strs
end
}
setmetatable(aa,m_aa)
print(aa)--2:1223.44:44