• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Lua中的迭代器和泛型for介绍

    任何一种结构,只要允许你遍历集合中所有元素的都可称之为迭代器。lua中常常使用函数来描述迭代器,每次调用该函数都返回集合的下一个元素。每一个迭代器都需要保存一些状态来知道当前处于什么位置和如何进行下一次迭代。对于这样的任务,闭包提供了很好的机制来完成。一个典型的闭包结构包含两个函数:一个是闭包自身,一个是创建闭包的工厂。

    例如,我们可以写过简单的list迭代器,让他仅仅返回值。

    复制代码 代码如下:

    function values( t )
         local i = 0;
         return function() i = i + 1;return t[i] end
    end

    tb = {33, 44, 55}

    for v in values(tb) do
         print(v)
    end


    泛型for簿记所有迭代循环,首先调用迭代工厂,并内部保存迭代函数。每次迭代时调用新的迭代函数。但迭代器返回nil循环结束。

    上面的迭代器有个瑕疵:需要创建一个闭包。创建闭包是需要代价的,只是大部分情况下都没问题,然而有些情况却是不能容忍这个代价的。这时的解决方法是使用泛型for。泛型for本身保存迭代状态,包括迭代函数,状态常量,控制变量,因此不必付出闭包的代价,称这种迭代器为无状态迭代器。

    泛型for的语法:

    复制代码 代码如下:

    for var-list> in exp-list> do
         body>
    end

    执行过程:

    1.初始化迭代函数,状态常量,控制变量,不足补nil,多出忽略。
    2.状态常量,控制变量作为参数调用迭代函数。
    3.将迭代函数返回的值付给变量列表。
    4.如果返回的第一个值为nil,则循环结束,否则执行循环体。
    5.回到第2步。

    如果遇到需要保存多个状态,还有种方法是将所有状态封装到表中。实际上,我们不推荐这么写。因为创建闭包的代价比创建表的要小,而且lua处理闭包的速度更快些。还有更强大更复杂的方式是使用协同来创建迭代器。

    您可能感兴趣的文章:
    • 深入解读Lua中迭代器与泛型for的使用
    • 浅析Lua中的迭代器
    • Lua教程(五):迭代器和泛型for
    • Lua中的迭代器和泛型for学习总结
    • Lua中的迭代器和泛型for实例
    • Lua中的迭代器(iterator)浅析
    • Lua的迭代器使用中应该避免的问题和技巧
    • Lua中的for循环和迭代器的秘密探究
    • Lua中的迭代器浅析
    • Lua基础迭代器的使用实例
    上一篇:Lua的协程(coroutine)简介
    下一篇:Lua中写排序算法实例(选择排序算法)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Lua中的迭代器和泛型for介绍 Lua,中的,迭代,器,和,泛型,