美文网首页
2018-08-02

2018-08-02

作者: AbnerTan | 来源:发表于2018-08-02 22:58 被阅读0次

Lua中的函数


  • 前面已经介绍过了lua语言中定义函数的关键字为 funtion

      -- function define
      function [your function name]()
          [logic code]
          return [args]
      end
    
  • 其中 function () end 几个关键字是定义一个函数所必须的

  • function name也不是必须的,lua是支持匿名函数的.

  • return的值也是不必须的,像其他编程语言一样,lua的函数可以不返回值,仅仅只做逻辑处理

  • 需要注意的一点是,lua中默认就是全局的变量和函数,所以如果想要控制函数或者变量的生命周期可以使用 local 关键字,local关键字声明之后就成为了局部变量,lua推荐使用local关键字

lua中的闭包函数(closure function)

  • lua中闭包函数是可以提高运行效率的,关于闭包函数的相关概念大家可以自行google,这里不做过多说明,我们直接在代码里面看看什么是闭包函数的吧:
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)

  • 我们只需要将上面的 closure函数的名字删除掉其实他就变成了匿名函数了:
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

相关文章

  • 2018-08-02

    2018-08-02

  • 2018-08-13

    2018-08-02 梁新平 2018-08-02 21:26 · 字数 617 · 阅读 0 · 日记本 【月度...

  • 2018-08-02

    2018-08-02 哈利波特二代 2018-08-02 10:32 · 字数 259 · 阅读 0 · 日记本 ...

  • 用户层~内核层通信(netlink 内核层)

    layout: posttitle: netlink通信机制-内核层date: 2018-08-02 02:01:...

  • 国际冠军杯|阿森纳 VS 切尔西

    国际冠军杯/吉尼斯杯 比赛时间:2018-08-02 星期四 03:00 欧洲指数:2.84 3.90 2.27 ...

  • 忆梅☕️玉露

    小径银珠弹,裙裾芳馥染。田田迎清风,换作茶一盏。 忆梅2018-08-02

  • 读懂芯片IC的datasheet

    读懂datasheet 2018-08-02 做电子设计,难免要读datasheet,而优质的中文版可遇不可求,...

  • 2018-08-02

    2018-08-02 f红艳 事件:今天和儿子讨论十二条快乐软件,关于界限与底线。 感受:失望,惊讶,平静。 想法...

  • 欧冠杯:格拉茨风暴 VS 阿贾克斯

    欧冠杯竞彩 比赛时间:2018-08-02 星期四 02:30 欧洲指数:3.70 3.65 1.90 亚洲初数:...

  • 20180930

    往后余生,我想以自己喜欢的方式度过 流浪摄影师 关注 2018-08-02 13:33 · 字数 1127 · 阅...

网友评论

      本文标题:2018-08-02

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