rust iter3
struct CountdownIterator(i32); impl Iterator for CountdownIterator { type Item = i32; fn next(&mut self) -> Option<Self::Item> { self.0 -= 1; if self.0 < 0 { None } else { Some(self.0) } } } struct Countdown(i32); impl IntoIterator for Countdown { type Item = i32; type IntoIter = CountdownIterator; fn into_iter(self) -> Self::IntoIter { CountdownIterator(self.0) } } impl<'a> IntoIterator for &'a Countdown { type Item = i32; type IntoIter = CountdownIterator; fn into_iter(self) -> Self::IntoIter { CountdownIterator(self.0) } } impl<'a> IntoIterator for &'a mut Countdown { type Item = i32; type IntoIter = CountdownIterator; fn into_iter(self) -> Self::IntoIter { CountdownIterator(self.0) } } fn main() { let c = Countdown(10); for i in &c { for j in &c { println!("({0}, {1})", i, j) } } }