Rust iterators: Difference between revisions

From wikinotes
Line 2: Line 2:
Like python generators, ruby enumerators, etc.
Like python generators, ruby enumerators, etc.


= Example =
= Implement an Iterator =
<blockquote>
<blockquote>
This will keep on iterating over weekdays infinitely.
This will keep on iterating over weekdays infinitely.

Revision as of 20:12, 9 February 2023

Iterators are lazily evaluated sequences of items.
Like python generators, ruby enumerators, etc.

Implement an Iterator

This will keep on iterating over weekdays infinitely.

#[derive(Debug)]
enum Weekday {
    MON = 0,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN,
}

impl Iterator for Weekday {
    type Item = Weekday;

    fn next(&mut self) -> Option<Self::Item> {
        let day = match self {
            Weekday::MON => Weekday::TUE,
            Weekday::TUE => Weekday::WED,
            Weekday::WED => Weekday::THU,
            Weekday::THU => Weekday::FRI,
            Weekday::FRI => Weekday::SAT,
            Weekday::SAT => Weekday::SUN,
            Weekday::SUN => Weekday::MON,
        };
        Some(day)
    }
}

fn main() {
    let mut day = Weekday::SAT;
    day.next();
    day.next();
    matches!(day, Weekday::MON);
    println!("success");
}