当先锋百科网

首页 1 2 3 4 5 6 7

一、闭包

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," "))--把表中数据连接起来

Lua热更新教学视频​pan.baidu.com

 

提取码:c7o0

 

王者荣耀全栈开发视频​pan.baidu.com

 

提取码:dhhc