无涯教程-Lua - Iterators(迭代器)

这篇具有很好参考价值的文章主要介绍了无涯教程-Lua - Iterators(迭代器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用表,这些表用于创建各种数据结构(如数组)。

通用迭代器

通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。

array={"Lua", "Tutorial"}

for key,value in ipairs(array) 
do
   print(key, value)
end

当无涯教程运行上面的代码时,将获得以下输出-

1  Lua
2  Tutorial

上面的示例使用了Lua提供的默认 ipairs 迭代器函数。

在Lua中,使用函数来表示迭代器。基于这些迭代器函数的状态维护,有两种主要类型-

  • 无状态迭代器
  • 有状态迭代器

无状态迭代器

通过名称本身,可以理解这种类型的迭代器函数不保留任何状态。

现在让无涯教程看一个使用简单的函数创建自己的迭代器的示例,该函数打印 n 的平方。

function square(iteratorMaxCount,currentNumber)

   if currentNumber<iteratorMaxCount
   then
      currentNumber=currentNumber+1
      return currentNumber, currentNumber*currentNumber
   end
	
end

for i,n in square,3,0
do
   print(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

可以稍微修改上面的代码,以模仿迭代器的 ipairs 函数的工作方式。如下所示。

function square(iteratorMaxCount,currentNumber)

   if currentNumber<iteratorMaxCount
   then
      currentNumber=currentNumber+1
      return currentNumber, currentNumber*currentNumber
   end
	
end

function squares(iteratorMaxCount)
   return square,iteratorMaxCount,0
end  

for i,n in squares(3)
do 
   print(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

有状态迭代器

之前使用函数进行迭代的示例未保留状态。每次调用该函数时,它都会根据发送给该函数的第二个变量返回集合的下一个元素。为了保持当前元素的状态,使用了闭包,闭包在函数调用之间保留变量值。

现在,让无涯教程看一个创建自己的迭代器的示例,其中将使用闭包。

array={"Lua", "Tutorial"}

function elementIterator (collection)

   local index=0
   local count=#collection
	
   -- The closure function is returned
	
   return function ()
      index=index + 1
		
      if index <= count
      then
         -- return the current element of the iterator
         return collection[index]
      end
		
   end
	
end

for element in elementIterator(array)
do
   print(element)
end

当运行上面的程序时,将得到以下输出。

Lua
Tutorial

在上面的示例中,无涯教程可以看到elementIterator内部有另一个方法,该方法使用局部外部变量index和count每次调用函数时通过增加索引来返回集合中的每个元素。

Lua - Iterators(迭代器) - 无涯教程网无涯教程网提供迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用...https://www.learnfk.com/lua/lua-iterators.html文章来源地址https://www.toymoban.com/news/detail-629409.html

到了这里,关于无涯教程-Lua - Iterators(迭代器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-Lua - 函数声明

    函数是一起执行任务的一组语句,您可以将代码分成单独的函数。 Lua语言提供了程序可以调用的许多内置方法。如方法 print() 打印在控制台中作为输入传递的参数。 Lua编程语言中方法定义的一般形式如下- Lua编程语言中的方法定义由方法标头和方法主体组成。这是方法的所有

    2024年02月14日
    浏览(22)
  • 无涯教程-Lua - Modules(模块)

    模块就像可以使用 require 加载的库,并且具有包含 Table 的单个全局名称,该模块可以包含许多函数和变量。 其中一些模块示例如下。 让无涯教程考虑一个简单的示例,其中一个函数具有数学函数。将此模块称为mymath,文件名为mymath.lua。文件内容如下- 现在,为了在另一个文

    2024年02月14日
    浏览(25)
  • 无涯教程-Lua - Arrays(数组)

    数组是对象的有序排列,可以是包含行集合的一维数组,也可以是包含多行和多列的多维数组。 在Lua中,数组是使用带有整数的索引表实现的。数组的大小不是固定的,并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组可以使用简单的表结构表示,并且可以使

    2024年02月14日
    浏览(23)
  • 无涯教程-Lua - while语句函数

    只要给定条件为真,Lua编程语言中的 while 循环语句就会重复执行目标语句。 Lua编程语言中 while 循环的语法如下- 在这里,需要注意的关键是 while 循环可能根本不执行。当测试条件并且输出为false时,将跳过循环主体,并执行 while 循环之后的第一条语句。 构建并执行上述代码

    2024年02月14日
    浏览(29)
  • 无涯教程-Lua - nested语句函数

    Lua编程语言允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明这一概念。 Lua中嵌套for循环语句的语法如下- Lua编程语言中的嵌套while循环语句的语法如下- Lua编程语言中的嵌套重复...直到循环语句的语法如下- 关于循环嵌套的最后一点是,您可以将任何类型的

    2024年02月14日
    浏览(25)
  • 无涯教程-Lua - for语句函数

    for 循环是一种重复控制结构,可让您有效地编写需要执行特定次数的循环。 Lua编程语言中 for 循环的语法如下- 这是 for 循环中的控制流程- 首先执行 init 步骤,并且仅执行一次。此步骤使您可以声明和初始化任何循环控制变量。 接下来是max/min。这是循环继续执行之前的最大

    2024年02月14日
    浏览(29)
  • 无涯教程-Lua - 文件I/O

    I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式( Implicit )和显式( Explicit )操作。 对于以下示例,无涯教程将使用例文件test.lua,如下所示。 一个简单的文件打开操作使用以下语句。 下表列出了各种文件模式。 Sr.No. Mode Remark 1 \\\" r\\\" 只读模式,是打开现有文件的

    2024年02月14日
    浏览(24)
  • 无涯教程-Lua - 嵌套if语句函数

    在Lua编程中,您可以在另一个 if or else if 语句中使用一个 if or else if 语句。 嵌套if 语句的语法如下- 您可以像嵌套 if 语句一样,嵌套 else if ... else 。 当您构建并运行以上代码时,它将产生以下输出。 Lua 中的 嵌套if语句函数 - 无涯教程网 无涯教程网提供在Lua编程中,您可以

    2024年02月14日
    浏览(31)
  • 【Lua学习笔记】Lua进阶——Table,迭代器

    在【Lua学习笔记】Lua入门中我们讲到了Lua的一些入门知识点,本文将补充Lua的一些进阶知识 在上篇文章的最后,我们指出通过查询_G的字符索引,发现table.insert实际上是一个名为table的table结构里的索引指向的函数 实际上不仅它,所有的函数,模块,全局变量,元表 😅😅😅

    2024年02月15日
    浏览(27)
  • Lua gc 机制版本迭代过程简述

    内存自动化管理是指在指定内存不再被需要时可以自动被释放。通常有两种方案来实现内存的自动化管理: 引用计数 (reference count) 垃圾回收 (garbage collection) Lua 选择的是垃圾回收的方案。不选择引用计数的方式的主要原因是,在动态类型语言中,使用引用计数来管理内

    2024年02月16日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包