一、闭包
1.简单示例
function Fun( )
local i=0 --i 便练 成为内嵌函数的“upValue” 既不是全局变量也不是局部变量
--为“非局部变量”
return function ( )--内部嵌入的匿名函数
i=i+1
return i
end
end
f1=Fun()
print(f1())--输出1
print(f1())--输出2
print(f1())--输出3
print(f1())--输出4
2.带参闭包
function FunWithPara( i )
return function ( )--内嵌匿名函数
i=i+1
return i
end
end
fun1=FunWithPara(10)
print(fun1)--11
print(fun1)--12
print(fun1)--13
print(fun1)--14
3.具备多个内嵌函数的闭包
function FunMutil( )
local numUpValue=10
function InnerFun1( )--内嵌函数
print(numUpValue)
end
function InnerFun2( )
numUpValue=numUpValue+100
print(numUpValue)
end
return InnerFun1,InnerFun2
end
--测试
local res1,res2=FunMutil()
res1() --10
res2() --110
4.带参数的内嵌函数
function Fun4(num)
return function ( value )
num =num*value
return num
end
end
fun4=Fun4(10)
print(fun4(2)) --20
print(fun4(2)) --40
print(fun4(2)) --80
5.闭包可以具备多个实例
function Fun5()
local i=0
return function ( )
i=i+1
return i
end
end
--两个实例互补影响
fun5=Fun5()
print(fun5()) --1
print(fun5()) --2
print(fun5()) --3
fun51=Fun5()
print(fun51()) --1
print(fun51()) --2
print(fun51()) --3
6.闭包的使用(迭代器)
function Itrs(tabArry)
local i=0
return function( )
i=i+1
return tabArry[i]
end
end
--定义一个表
myTab={10,20,30,40,50}
for m in Itrs(myTab) do
print(m)
end
二、模块:
1.定义:由变量、函数等组成的table
2.作用:与封装库类似
3.注意:定义local的函数,就不要加模块限定,否则出错。
4.定义模块
--定义一个局部模块(表)
local myModel={}
--定义模块中的字段
myModel.gHeight=100
--定义模块中的函数
function myModel.Fun1( )
print("Fun1 Method invoked")
end
三、文件互调
1.被调用的lua文件,必须定义为“模块”的形式。
2.调用的变量与函数必须不能是局部的
3.给require赋值一个变量
四、函数前置声明与unpack函数
1.函数本质是匿名的,即没有名称。讨论一个函数,本质是讨论一个持有此函数的变量。
2.函数的前置声明,可以增加程序整体的“易读性”
local Fun1,Fun2
function Fun1( )
print("Fun1")
end
function Fun2( )
print("Fun2")
end
Fun1()
Fun2()
3.unpack函数 接受一个数组作为参数,并从下标1开始返回该数组的所有元素。
4.注意:
- unpack可以很容易的把table集合中数据“解包”输出。
- 与之对应的是table.concat()函数,可以把table集合中数据“压缩”为一个字符串输出
tabl={"sd","ssde","er"}
print(unpack(tabl))--解包将数据分开
--对比concat()
print(table.concat(tabl," "))--把表中数据连接起来
提取码:c7o0
提取码:dhhc