Ленивая оценка?
Звучит как хороший кандидат на ленивую оценку.
Как насчет передачи записи в блок, который реализует каждый метод доступа с ленивой оценкой и читает запись, если она используется?
Если имеется много методов доступа, вы можете просто указать метод атрибута, который проверяет, выполнена ли обработка чтения, выполняет ли это при необходимости, а затем возвращает запись.
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
Кстати, какова мотивация пропустить чтение? Скорость исполнения? Если это так, я мог бы просто попробовать это простым способом и всегда читать, просто чтобы посмотреть, достаточно ли это быстро.