• 《Programming in Lua 3》读书笔记(六)


    Part1-7:Iterators and the Gnenric for(迭代器和泛型for)

    泛型for
    语法形式:
    for <var_list> in <exp_list> do
         <body>
    end
    var_list:一个或多个变量名,以逗号分隔;一般来看也多是一个元素;
    exp_list:一个或多个表达式的列表,也是以逗号分隔。一般来看,表达式列表只有一个元素,就是调用一个迭代器。

    Iterator and Closure
    Lua中的迭代器的作用就是每一次返回一个集合中的下一个元素。结合Lua的Closure实现这一个功能。并提出了factory这个概念

    迭代器:
    e.g.
    --返回t的所有元素
    function values (t)
         local i = 0
         return function() i = i + 1 ; return t[i] end  --创建closure,保存i这个非局部变量
    end

    --打印t的所有值
    t = { 10, 20 ,30}
    for element in values(t) do
         print(element)
    end

    --string.find操作
    string.find()函数可以直接查找某一个字母,也可以直接按位置查找一个单词
    e.g1.
    s,e = string.find("hello lua","h")
    print(s,e)     --1,1
     

    e.g2.
    s,e = string.find("hello lua","%w+",1)           --查找第一个单词,注意第二个参数"%w+"
    print(s,e)      --1,5

     
    string.find()函数是介绍lua的多重返回值的例子,该函数返回两个值,第一个是查找到的元素在字符串中的index值,第二个返回值是该元素结束的index值。例如eg1中返回1,1表示"h"在字符串的第一个位置,结束位置则是1;
    eg2中返回第一个参数是1,表示该单词的起始位置,第二个参数5表示该单词的结束位置。

    泛型for在循环时,遍历table的两个方法:
    for i,v in pairs(a) do               --此处有一个函数next可以替换这里的pairs 语法格式为 v in next,a(注意这里a前面的逗号,这个不能少)
    end
    for i,v in ipairs(a) do
    end
    这两个方法有什么区别呢?

    关于泛型for和其迭代器,需要再查阅相关的资料

    Lua实现list结构,代码:
    local 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 "traverse" do
         list = {val = line,next = list}
    end
    

    7.4 Iterator with Complex State
    使用table作为state

    关于这一章的内容还需要再查阅相关的资料进行进一步的理解,看来直接看英文资料还是有点吃力的。
  • 相关阅读:
    使用mail架包发送邮件javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connec
    java容器 Map Set List
    COJ 1686:记忆化搜索
    POJ 3694:桥
    COJ 1685:贪心+set
    COJ 1687:Set
    COJ 1684:线段树
    POJ 3693:RMQ+后缀数组
    URAL 1297:后缀数组求最长回文串
    POJ 1743:后缀数组
  • 原文地址:https://www.cnblogs.com/zhong-dev/p/4044580.html
Copyright © 2020-2023  润新知