]>
Commit | Line | Data |
---|---|---|
ff7c6d11 XL |
1 | fn iterate<T, F>(initial: T, f: F) -> Iterate<T, F> { |
2 | Iterate { | |
3 | state: initial, | |
4 | f: f, | |
5 | } | |
6 | } | |
7 | ||
8 | pub struct Iterate<T, F> { | |
9 | state: T, | |
10 | f: F | |
11 | } | |
12 | ||
13 | impl<T: Clone, F> Iterator for Iterate<T, F> where F: Fn(&T) -> T { | |
14 | type Item = T; | |
15 | ||
16 | #[inline] | |
17 | fn next(&mut self) -> Option<Self::Item> { | |
18 | self.state = (self.f)(&self.state); | |
19 | Some(self.state.clone()) | |
20 | } | |
21 | #[inline] | |
fc512014 | 22 | fn size_hint(&self) -> (usize, Option<usize>) { (usize::MAX, None) } |
ff7c6d11 XL |
23 | } |
24 | ||
25 | fn main() { | |
26 | let a = iterate(0, |x| x+1); | |
27 | println!("{:?}", a.iter().take(10).collect::<Vec<usize>>()); | |
dfeec247 | 28 | //~^ ERROR no method named `iter` found |
ff7c6d11 | 29 | } |