2018-08-02

2018-08-02  本文已影响0人  AbnerTan

Lua中的函数


lua中的闭包函数(closure function)

local function autoAdd()
    local i = 0
    local function closure()
        if i < 5 then
            i = i+1
            return "id"..i, i
        end
    end
    return closure
end

for k, v in autoAdd(5) do
    print (k, v)
end

运行结果

result.png
  • 我们可以看到,autoAdd方法, 他可以作为泛型的迭代器放到循环中使用,并且可以正确的返回我们所需要的值,这个是不是很神奇. 我们发现实现这个迭代器的最主要的一部分就是使用到的闭包函数,没错就是这个closure函数,我们发现它是可以使用到上下文的内容,并且在被调用之后保存上次的状态值,下次使用到的时候直接在它的基础上使用.如果有使用过python的小伙伴一定不难发现这个其实就是python的迭代器了.

lua中的匿名函数(anonymous function)

local function autoAdd()
    local i = 0
    return  function ()
        if i < 5 then
            i = i+1
            return "id"..i, i
        end
    end
end

for k, v in autoAdd(5) do
    print (k, v)
end
  • 这样处理之后得到的结果当然是一样的. 这边我们可以理解为,没有名字的函数就是匿名函数,完全符合语义, 它的好处就是我们在写一些函数的时候,可以不用必须存在名称,就像上面的代码一样, return后面的function我们完全不需要知道它的名字是什么,我们只需要知道最后返回的结果就ok了!

转载请写明出处:https://www.jianshu.com/p/47617a4c55cb

上一篇下一篇

猜你喜欢

热点阅读