struct Seq { start: i32, end: i32, } impl Seq { pub fn new(start: i32, end: i32) -> Self { Self { start, end, } } } impl Iterator for Seq { type Item = i32; fn next(&mut self) -> Option { if self.start < self.end { let a = self.start; self.start += 1; Some(a) } else { None } } } fn main() { test_001(); test_002(); test_003(); test_004(); } // -> 10 11 12 13 14 fn test_001() { println!("## test001"); let seq = Seq::new(10, 15); print!("->"); for a in seq { print!(" {}", a); } println!(); } // -> 10 11 12 13 14 fn test_002() { println!("## test002"); let mut seq = Seq::new(10, 15); print!("->"); while let Some(a) = seq.next() { print!(" {}", a); } println!(); } // -> 10 11 12 fn test_003() { println!("## test003"); let mut seq = Seq::new(10, 15).take(3); print!("->"); while let Some(a) = seq.next() { print!(" {}", a); } println!(); } // -> 10 // -> 10 11 12 13 14 fn test_004() { println!("## test004"); let mut seq = Seq::new(10, 15).peekable(); println!("-> {}", seq.peek().unwrap()); print!("->"); while let Some(a) = seq.next() { print!(" {}", a); } println!(); }