Iterator adapter similar to fold (see previous bite) - holds some internal state and produces new iterator.
Note that Option is yielded from the closure.
1
2
3
4
5
6
7
8
9
10
let nums = [1, 2, 3];
let mut iter = nums.iter().scan(0, |acc, &x| {
*acc = *acc + x;
Some((*acc, x))
});
assert_eq!(iter.next(), Some((1, 1)));
assert_eq!(iter.next(), Some((3, 2)));
assert_eq!(iter.next(), Some((6, 3)));