代码之家  ›  专栏  ›  技术社区  ›  user141335

不可查找流的Ruby迭代器

  •  2
  • user141335  · 技术社区  · 14 年前

    Enumerable

    你喜欢哪一个?

    while record = foo.next
      if bar
        foo.read
      else
        foo.skip
      end
    end
    

    foo.each do |record|
      if bar
        foo.read
      else
        foo.skip
      end
    end
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   DigitalRoss    14 年前

    懒惰的评价?

    听起来很适合做懒散的评估。

    将一条记录提供给实现每个具有延迟求值的访问器的块,并在使用记录时读取该记录如何。

    如果有很多访问器,您可以只生成一个属性方法,该方法检查读取处理是否已完成,必要时执行该操作,然后返回记录。

    foo.each do |record_manager|
      if bar
        puts record_manager.get.field1 # get does foo.read, whatever that does
        puts record_manager.get.field2 # just returns the processed object this time
      else
        # each() will do .skip() if no get() was called
      end
    end
    

    顺便问一下,跳读和阅读的动机是什么?执行速度?如果是这样的话,我可以试着用简单的方式阅读,看看是否足够快。