воскресенье, 12 июля 2020 г.

Rust, Loops, Iterators

Online Rust Playground

pub struct Items {
    minimum: i32,
    step: i32,
    maximum: i32,
}

impl Iterator for Items {
    type Item = i32;

    fn next(&mut self) -> Option<Self::Item> {
        if self.minimum >= self.maximum {
            return None;
        }
        let current = self.minimum;
        self.minimum += self.step;
        Some(current)
    }
}

fn main() {
    println!("-> Loops");
    loops();

    println!("-> Iterator");
    iter();
}

//Loops
fn loops() {
    println!("loop");
    let mut n = 0;
    loop {
        n += 1; //step
        if n > 5 {
            break;
        }
        println!("{}", n);
    }

    println!("while");
    let mut m = 0;
    while m < 5 {
        m += 1; //step
        println!("{}", m)
    }

    println!("for - range");
    for mut i in (0..5).step_by(2) {
        i += 1;
        println!("{}", i);
    }
 
    println!("for - idx");
    for (idx, i) in (1..=5).enumerate().step_by(2) {
        println!("{}: {}", idx, i);
    }

    println!("for - array");
    let arr = [1, 2, 3];
    for a in arr.iter().step_by(2) {
        println!("{}", a);
    }
}

//Iterator
fn iter() {
    let mut it = Items {
        minimum: 2,
        step: 3,
        maximum: 15,
    };
    println!("loop");
    loop {
        match it.next() {
            Some(v) => println!("loop {}", v),
            None => break,
        }
    }

    println!("while");
    it = Items {
        minimum: 3,
        step: 4,
        maximum: 15,
    };
    while let Some(n) = it.next() {
        println!("while {}", n)
    }

    println!("for");
    it = Items {
        minimum: 5,
        step: 10,
        maximum: 50,
    };
    for i in it {
        println!("for {}", i);
    }
}

Комментариев нет:

Отправить комментарий