对 Lua闭包 知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助

Lua闭包

--当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界。
--闭包是由函数与其相关的引用环境组合而成的实体 闭包=函数+引用环境
--不是在局部作用范围内定义的一个变量,同时,它又不是一个全局变量 --upvalue 由于有了这样的一种变量存在,所以就有了lua中的闭包
--上面那个变量主要应用在嵌套函数和匿名函数里。
--在lua函数中在定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有“局部变量”,而这些变量就被称为该内嵌函数的upvalue
--upvalue :是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(upvalue)
--upvalue实际指的是变量而不是值,这些变量可以在内部函数之间共享

function newMoney()
    local i =0
    return function() --匿名函数
        i=i+1
        return i 
    end
end
c1=newMoney()
print(c1()) --输出 1
print(c1()) --输出 2
print(c1()) --输出 3


--把闭包当成了一个迭代器
tabl = {1,2,3,4,5,6,8,7,9}
function ita(t)
    local i = 0
    return function()
        i = i+1
        return t[i]
    end
end
for i in ita(tabl) do    --在这里体现把闭包当成了迭代器
    print(i)          --输出1 2 3 4 5 6 8 7 9
end

--关于上述说法的一些例子***********************************************
function Text()
    local iVal = 10   --upvalue
    function InnerText1()  --内嵌函数
        print(iVal)
    end
    function InnerText2()  --内嵌函数
        iVal = iVal+10
    end
    return InnerText1,InnerText2
end
--将函数赋值给变量,此时变量a绑定了函数innerFunc1,b 绑定了函数InnerFunc2
local a,b = Text()
a()  --调用a
b()  --调用b ,在b函数中修改了upvalue  iVal
a()  -- 调用a ,打印修改后的upvalue
-- 输出结果为  10   20

猜你喜欢

转载自www.cnblogs.com/mengmengxia/p/9229237.html
今日推荐