zoukankan      html  css  js  c++  java
  • 迭代器与泛型for

    迭代器与closure

    function allwords()
      local line=io.read()
      local pos=1
      return function()
        while line do 
          local s,e=string.find(line,"%w+",pos)
          if s then
            pos=e+1
            return string.sub(line,s,e)
          else
            line=io.read()
            pos=1
          end
        end
        print("function endddddddddd")
        return nil
      end
    end
    
    for word in allwords() do
      print(11111)
      print(word)
    end
    
    
            

     无状态的迭代器

    local 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 --正确--for获得3个值,迭代器函数,恒定状态,以及控制变量
      return iter(a,1) --错误
    end
    
    a={4,5,6,7}
    --for k,v in ipairs(a) do 
    --  print(k,v)
    --end
    
    for k,v in next,a do
      print(k,v)
    end

     复杂迭代器

    --复杂迭代器,不需要定义局部变量pos
    local iterator
    function allwords()
      local state={line=io.read(),pos=1}
      return iterator,state
    end
    
    function iterator(state)
      while state.line do
        local s,e=string.find(state.line,"%w+",state.pos)
        if s then 
          state.pos=e+1
          return string.sub(state.line,s,e)
        else
          state.line=io.read()
          state.pos=1
        end
      end
      return nil
    end
    
    for word in allwords() do
      print(11111)
      print(word)
    end

     真实迭代器

    function allwords(f)
      for line in io.lines() do
        for word in string.gmatch(line,"%w+") do
          f(word)
        end
      end
    end
    allwords(print)
  • 相关阅读:
    日常小算法
    美化type="file"控件
    流文件_从网络中获取文件
    Kibana配置安装
    JDK安装
    Node.js安装windows环境
    RabbitMQ高可用
    RabbitMQ实例C#
    RabbitMQ基础命令rabbitmqctl
    RabbitMQ配置
  • 原文地址:https://www.cnblogs.com/ptqueen/p/6763791.html
Copyright © 2011-2022 走看看