Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpIrNx 103 of 288 menu
◀ ▶

Следующий элемент обхода в Rust

Метод следующего элемента двигает внутренний счет и возвращает необязательное значение. Пока счет меньше конца, в ответе лежит очередное число, иначе приходит пустой вариант, и цикл останавливается.

Опишем структуру со счетом и границей и выполним для нее трейт обхода:

struct Count { n: i32, end: i32, } impl Iterator for Count { type Item = i32; fn next(&mut self) -> Option<i32> { if self.n >= self.end { None } else { let v = self.n; self.n += 1; Some(v) } } } fn main() { for x in Count { n: 0, end: 3 } { println!("{}", x); } }

На экране три строки: 0, 1 и 2. После второго числа счет становится равным end, и следующий шаг уже не отдает элемент.

Тот же обход можно пройти вручную и явно обработать пустой ответ:

struct Count { n: i32, end: i32, } impl Iterator for Count { type Item = i32; fn next(&mut self) -> Option<i32> { if self.n >= self.end { None } else { let v = self.n; self.n += 1; Some(v) } } } fn main() { let mut walk = Count { n: 0, end: 2 }; loop { match walk.next() { Some(v) => println!("{}", v), None => break, } } }

Дана структура:

struct Step { cur: i32, stop: i32, }

Выполните трейт обхода с элементом i32: пока cur меньше stop, отдавайте текущее число и увеличивайте cur. Пройдите циклом от Step { cur: 5, stop: 8 } и выведите три числа.

Дана структура:

struct Range { at: i32, top: i32, }

Сделайте обход, который отдает at, затем увеличивает поле на единицу, пока at не достигнет top. В main пройдите циклом и скажите, сколько чисел напечатается для Range { at: 0, top: 4 }.

Скажите, почему после последнего числа в примере с Count цикл for сам прекращается, хотя в main нет отдельной проверки на пустой вариант.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить