diff --git a/iter/Cargo.lock b/iter/Cargo.lock new file mode 100644 index 0000000..19084f4 --- /dev/null +++ b/iter/Cargo.lock @@ -0,0 +1,5 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "iter" +version = "0.1.0" diff --git a/iter/Cargo.toml b/iter/Cargo.toml new file mode 100644 index 0000000..d141c02 --- /dev/null +++ b/iter/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "iter" +version = "0.1.0" +authors = ["Hatter Jiang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/iter/src/main.rs b/iter/src/main.rs new file mode 100644 index 0000000..756c3d8 --- /dev/null +++ b/iter/src/main.rs @@ -0,0 +1,54 @@ +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(); +} + +fn test_001() { + println!("## test001"); + let seq = Seq::new(10, 15); + for a in seq { + println!("-> {}", a); + } +} + +fn test_002() { + println!("## test002"); + let mut seq = Seq::new(10, 15); + while let Some(a) = seq.next() { + println!("-> {}", a); + } +} + +fn test_003() { + println!("## test003"); + let mut seq = Seq::new(10, 15).take(3); + while let Some(a) = seq.next() { + println!("-> {}", a); + } +}