container -- update example to contain scope of closure borrow
This commit is contained in:
parent
6f571a63a6
commit
0f5baad6ee
1 changed files with 19 additions and 13 deletions
|
@ -181,19 +181,25 @@ never call its underlying iterator again once `None` has been returned:
|
||||||
~~~
|
~~~
|
||||||
let xs = [1,2,3,4,5];
|
let xs = [1,2,3,4,5];
|
||||||
let mut calls = 0;
|
let mut calls = 0;
|
||||||
|
|
||||||
|
{
|
||||||
let it = xs.iter().scan((), |_, x| {
|
let it = xs.iter().scan((), |_, x| {
|
||||||
calls += 1;
|
calls += 1;
|
||||||
if *x < 3 { Some(x) } else { None }});
|
if *x < 3 { Some(x) } else { None }});
|
||||||
|
|
||||||
// the iterator will only yield 1 and 2 before returning None
|
// the iterator will only yield 1 and 2 before returning None
|
||||||
// If we were to call it 5 times, calls would end up as 5, despite only 2 values
|
// If we were to call it 5 times, calls would end up as 5, despite
|
||||||
// being yielded (and therefore 3 unique calls being made). The fuse() adaptor
|
// only 2 values being yielded (and therefore 3 unique calls being
|
||||||
// can fix this.
|
// made). The fuse() adaptor can fix this.
|
||||||
|
|
||||||
let mut it = it.fuse();
|
let mut it = it.fuse();
|
||||||
it.next();
|
it.next();
|
||||||
it.next();
|
it.next();
|
||||||
it.next();
|
it.next();
|
||||||
it.next();
|
it.next();
|
||||||
it.next();
|
it.next();
|
||||||
|
}
|
||||||
|
|
||||||
assert_eq!(calls, 3);
|
assert_eq!(calls, 3);
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue