• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua中的迭代器和泛型for介绍

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

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua coroutine,lua coroutine.start,lua coroutine.yield,lua coroutine.resume,lua coroutine.create等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

任何一种结构,只要允许你遍历集合中所有元素的都可称之为迭代器。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
</div>
泛型for簿记所有迭代循环,首先调用迭代工厂,并内部保存迭代函数。每次迭代时调用新的迭代函数。但迭代器返回nil循环结束。

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

泛型for的语法:
for <var-list> in <exp-list> do
     <body>
end
</div>

执行过程:

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

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

</div>

您可能想查找下面的文章:

  • Lua协程(coroutine)程序运行分析
  • Lua中的迭代器和泛型for介绍
  • Lua之协同程序coroutine代码实例
  • Lua协同程序(COROUTINE)运行步骤分解

相关文章

  • Lua性能优化技巧(三):关于表
  • Lua math.fmod使用时的小数问题
  • Lua中的逻辑运算符使用详解
  • Lua UnPack函数用法实例
  • Lua中访问table里函数的方法示例
  • Lua中的string库和强大的模式匹配学习笔记
  • Lua中获取table长度问题探讨
  • Lua中的迭代器和泛型for介绍
  • Lua中的类编程代码实例
  • 把Lua函数传递到C/C++中实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua中使用table.concat连接大量字符串实例
    • Lua教程(二):基础知识、类型与值介绍
    • Redis教程(五):Set数据类型
    • Lua性能优化技巧(二):基本事实
    • Lua中获取table长度问题探讨
    • 使用nginx+lua实现信息访问量统计
    • Lua和C++语言的交互详解
    • Lua源码中字符串类型的实现
    • Redis教程(三):List数据类型
    • 安装Nginx+Lua开发环境

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有