不可查找流的Ruby迭代器
我想从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 或 懒惰评估? 听起来是一个很好的懒评估候选人 如何将一条记录提供给实现每个具有延迟求值的访
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