讲解一下Lua无状态迭代器

2023年 7月 19日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

讲解一下Lua无状态迭代器

无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。

每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。这种无状态迭代器的典型的简单的例子是 ipairs,它遍历数组的每一个元素。

案例

无状态迭代器的使用

#!/usr/bin/lua  print("haicoder(www.haicoder.net)n")  function square(iteratorMaxCount,currentNumber)    if currentNumberthen       currentNumber = currentNumber+1    return currentNumber, currentNumber*currentNumber    end  end  for i,n in square,3,0  do    print(string.format("i = %d, square = %d", i, n))  end  

程序运行,控制台输出,如下图:

我们可以看到,我们使用了函数来实现迭代器,实现了求数字 n 的平方。迭代的状态包括被遍历的表(循环过程中不会改变的状态常量)和当前的索引下标(控制变量),ipairs 和迭代函数都很简单,我们在 Lua 中可以这样实现:

#!/usr/bin/lua  print("haicoder(www.haicoder.net)n")  function iter (a, i)     i = i + 1     local v = a[i]     if v then        return i, v     end  end  function ipairs (a)     return iter, a, 0  end  

当 Lua 调用 ipairs(a) 开始循环时,他获取三个值:迭代函数 iter、状态常量 a、控制变量初始值 0;然后 Lua 调用 iter(a,0) 返回 1, a[1](除非 a[1]=nil);第二次迭代调用 iter(a,1) 返回 2,a[2]…直到第一个 nil 元素。

Lua无状态迭代器总结

无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。

每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。这种无状态迭代器的典型的简单的例子是 ipairs,它遍历数组的每一个元素。

本文来源:www.lxlinux.net/10128.html,若引用不当,请联系修改。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: