Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不可查找流的Ruby迭代器_Ruby_Iterator_Stream_While Loop_Each - Fatal编程技术网

不可查找流的Ruby迭代器

不可查找流的Ruby迭代器,ruby,iterator,stream,while-loop,each,Ruby,Iterator,Stream,While Loop,Each,我想从Ruby中不可查找的流中读取数据记录。我想让用户决定是跳过还是读取当前记录。通常,您会包括Enumerable,并提供必要的方法,以便在Ruby中使用迭代器,但在我的情况下,可以跳过数据,并且只能进行一次迭代,因此我不确定应该做什么 你喜欢哪一个 while record = foo.next if bar foo.read else foo.skip end end 或 懒惰评估? 听起来是一个很好的懒评估候选人 如何将一条记录提供给实现每个具有延迟求值的访

我想从Ruby中不可查找的流中读取数据记录。我想让用户决定是跳过还是读取当前记录。通常,您会包括
Enumerable
,并提供必要的方法,以便在Ruby中使用迭代器,但在我的情况下,可以跳过数据,并且只能进行一次迭代,因此我不确定应该做什么

你喜欢哪一个

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

懒惰评估? 听起来是一个很好的懒评估候选人

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

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

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

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

原因是数据相当大。
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