Iterator lookahead and cached unread state [ref]
Problem
- Implement repeated availability checks over
[4, 5] without consuming a cached value.
- Consume the first cached value, then obtain the second.
- Check for a remaining value after consuming both.
Python solution
class Lookahead:
def __init__(self, values):
self.it = iter(values)
self.ready = False
self.value = None
def has_next(self):
if not self.ready:
try:
self.value = next(self.it)
except StopIteration:
return False
self.ready = True
return True
def take(self):
if not self.has_next():
raise StopIteration
self.ready = False
return self.value
reader = Lookahead([4, 5])
(reader.has_next(), reader.has_next(), reader.value) # (True, True, 4)
reader.take() # 4
reader.has_next() # True
reader.take() # 5
reader.has_next() # False
Links