我想从Ruby中的不可搜索流中读取数据记录。我想让用户了解是应该跳过还是读取当前记录。通常你会包含Enumerable
并提供必要的方法让它在Ruby中有一个迭代器,但在我的情况下,数据可以被跳过,只有一次迭代是可能的,所以我不确定我应该做什么。 / p>
您更喜欢哪一个?
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
答案 0 :(得分:1)
听起来像懒惰评价的好候选人。
如何使用延迟评估生成一个实现每个访问者的块的记录,如果它被使用则读取记录。
如果有很多访问者,你可以产生一个属性方法来检查读取处理是否已经完成,如果有必要,然后返回记录。
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
顺便说一下,跳过vs阅读的动机是什么?执行速度?如果是这样,我可能会以简单的方式尝试并始终阅读,只是为了看它是否足够快。