美文网首页
Lua_利用闭合函数实现迭代器

Lua_利用闭合函数实现迭代器

作者: Mad_Elliot | 来源:发表于2018-12-25 17:32 被阅读0次

    c = a or b
    若a为真,c = a ;a为假, c = b。
    c = a and b
    若a为真,c = b;a为假, c = nil

    a = 10
    b = 20
    c = a or b
    d = a and b
    print(c) 
    print(d)
    
    10
    20
    

    闭合函数:
    一个函数包含另一个函数的调用,内部函数使用外部函数中的变量,生命周期延长

    function func1()
        local num = 1
        return function ()  --返回函数
            num = num + 1
            return num
        end
    end
    
    local f = func1() --获取返回的函数
    local n = f()   --再调用这个函数,获取返回值
    print(n)
    local n = f()  --num等于上一个num直接加1
    print(n)
    
    >>2
    >>3
    

    非全局函数:
    存储在局部变量中的函数称为非全局函数

    --非全局函数:存储在局部变量中的函数称为非全局函数
    local eat
    local drink
    eat = function( ... )
        print("吃")
        drink() --前面不声明直接调用会报错,调用不到
    end
    drink = function()
        print("喝")
    end
    eat()
    
    >>吃
    >>喝
    

    函数的尾调用:
    一个函数的调用是另外一个函数的最后一个动作,上面代码eat方法里最后调用drink函数就是一个尾调用

    -利用闭合函数是些迭代器:
    function DieDai(t)
        local i = 0
        return function()
            i = i + 1
            return t[i]
        end
    end
    
    t = {'11', '22', '33', '44'}
    --访问1
    local it = DieDai(t)
    while true do
        local value = it()
        if value == nil then
            break
        end
        print(value)
    end
    -- 访问2
    for value in DieDai(t) do
        print(value)
    end
    

    实现ipair迭代器

    function DieDai(t)
        local i = 0
        return function()
            i = i + 1
            if i > #t or t[i] == nil then
                return nil
            end
            return i, t[i]
        end
    end
    --调用
    t = {"一", "二", "三"}
    for k, v in DieDai(t) do
        print(k .. '\t' .. v)
    end
    

    相关文章

      网友评论

          本文标题:Lua_利用闭合函数实现迭代器

          本文链接:https://www.haomeiwen.com/subject/hpoxlqtx.html