主页 > 知识库 > Lua中的迭代器和泛型for实例

Lua中的迭代器和泛型for实例

热门标签:智能语音电销的机器人 电脑外呼系统辐射大吗 武汉百应人工智能电销机器人 百度地图标注位置网站 开通400电话申请流程 上海企业外呼系统排名 400手机电话免费办理 扬州电销外呼系统软件 如何利用高德地图标注家

1、迭代器与closure

在lua中,迭代器通常为函数,每调用一次函数,会返回集合中的下一个元素。每个迭代器在成功调用的时候,都需要保存一些状态,closure(闭包)完美为迭代器运用而生。

复制代码 代码如下:

function values(t)
    local i=0
    return function() --匿名函数
    i=i+1
    return t[i]
    end
end

t1 ={10, 20, 30}
it=values(t1)   --创建闭包变量的参数为函数参数
while true do
    local element=it()      --调用闭包时的参数为匿名函数的参数
    if(element==nil) then break
    end
    print(element)
end

t2={11,22,33}
for v in values(t2) do
   print(v)
end
--输出结果
--10
--20
--30
--11
--22
--33

从上面的例子可以看出,范型for相对于while给我们提供了更为清晰的实现逻辑。luo的内部函数已经为我们提供了迭代函数,运行foreach时我们会调用隐式的迭代器。

2、泛型for的语义

上面的迭代器有一个明显的缺点,就是每次循环时都要创建一个新的closure变量,而不能运用之前已经创建好了的closure变量,如果我在这个循环外再加一个循环进行迭代时,这就成了一个很繁琐并且容易出错的问题。

下面出现的迭代器很好的解决了这个问题,就不必为每次的泛型for都创建一个新的closure变量了。

复制代码 代码如下:

function iter(a,i)
   i=i+1
   if a[i]==nil then return nil,nil
   else return i,a[i]
   end
end

function ipairs(a)
   return iter,a,0         --iter在这里只是一个函数变量,并不是调用函数
end

a={"one","two","three"}
for i,v in ipairs(a) do
   print(i,v)
end

--上面的泛型for的写法可以改为下面的while写法
do
    local _it,_s,_k=ipairs(a)
    while true do
       k,v=_it(_s,_k)
       _k=k
       if k==nil then break end
       print(k,v)
    end
end
--输出结果
--1 one
--2 two
--3 three
--1 one
--2 two
--3 three

3、无状态迭代器

复制代码 代码如下:

function getnext(list,node)
  if not node then return list
  else return   node.next
  end
end

function traverse(list)
  return getnext,list,nil
end

list=nil
for line in io.lines() do
   list={next=list, value=line}
end

for node in traverse(list) do
    print(node.value)
end
--输入
--a
--b
--c
--输出
--c
--b
--a

通过上面的例子可以看出,可以无限次运用list变量和调用traverse函数而不必像第一种情况那样每次循环之前都创建新的closure变量。

您可能感兴趣的文章:
  • 深入解读Lua中迭代器与泛型for的使用
  • 浅析Lua中的迭代器
  • Lua教程(五):迭代器和泛型for
  • Lua中的迭代器和泛型for介绍
  • Lua中的迭代器和泛型for学习总结
  • Lua中的迭代器(iterator)浅析
  • Lua的迭代器使用中应该避免的问题和技巧
  • Lua中的for循环和迭代器的秘密探究
  • Lua中的迭代器浅析
  • Lua基础迭代器的使用实例

标签:嘉峪关 武汉 黑龙江 张掖 延边 宜宾 江西 新余

巨人网络通讯声明:本文标题《Lua中的迭代器和泛型for实例》,本文关键词  Lua,中的,迭代,器,和,泛型,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Lua中的迭代器和泛型for实例》相关的同类信息!
  • 本页收集关于Lua中的迭代器和泛型for实例的相关信息资讯供网民参考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推荐文章