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

2018-12-25  本文已影响0人  Mad_Elliot

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
上一篇 下一篇

猜你喜欢

热点阅读