• 对 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
    我们什么都没有,唯一的本钱就是青春。梦想让我与众不同,奋斗让我改变命运!
  • 相关阅读:
    勿忘初心
    欧拉函数与数论的结合UVA11426
    法雷级数
    欧拉函数及其应用
    poyla计数问题
    组合计数问题中容斥原理的应用
    数学问题当中的一些基本计数问题
    HDU4642博弈好题
    KMP算法在字符串中的应用
    UVA11722概率问题之线性规划
  • 原文地址:https://www.cnblogs.com/mengmengxia/p/9229237.html
Copyright © 2020-2023  润新知