struct Fibonacci(u64, u64);
impl Iterator for Fibonacci {
type Item = u64;
// The method that generates each item
fn next(&mut self) -> Option<Self::Item> {
let ret = self.0;
self.0 = self.1;
self.1 += ret;
Some(ret) // since `None` is never returned, we have an infinite iterator
}
// Implementing the `next()` method suffices since every other iterator
// method has a default implementation
}
Example use:
// the iterator method `take()` is an adapter which limits the number of items
// generated by the original iterator
for i in Fibonacci(0, 1).take(10) {
println!("{}", i);
}