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

Тип элемента своего обхода в Rust

Связанный тип трейта говорит, что именно отдает этот обход. Для счетчика чисел это обычно i32, для меток - String или ссылка на строку. Метод следующего элемента в сигнатуре использует тот же вид в Option.

Расширим счетчик: добавим поле шага и зададим тип элемента явно:

struct Count { n: i32, end: i32, step: 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 += self.step; Some(v) } } } fn main() { for x in Count { n: 0, end: 6, step: 2, } { println!("{}", x); } }

На экране 0, 2 и 4. Строка type Item = i32 фиксирует, что каждый успешный шаг приносит целое число, а не другой тип данных.

Тот же прием с коротким списком символов в поле и символом как элементом:

struct Letters { text: String, pos: usize, } impl Iterator for Letters { type Item = char; fn next(&mut self) -> Option<char> { if self.pos >= self.text.len() { None } else { let ch = self.text[self.pos..].chars().next()?; self.pos += ch.len_utf8(); Some(ch) } } } fn main() { for ch in Letters { text: String::from("ab"), pos: 0, } { println!("{}", ch); } }

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

struct Tick { value: i32, left: u32, }

Выполните трейт обхода: связанный тип элемента i32, на каждом шаге отдавайте value и уменьшайте left, пока счетчик шагов не станет нулем. Выведите все числа из Tick { value: 10, left: 2 }.

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

struct Word { s: String, i: usize, }

Сделайте обход с элементом char, который идет по символам строки s с учетом длины символа в байтах. Напечатайте символы слова "go".

Скажите, где в блоке выполнения трейта обхода нужно указать связанный тип, если метод должен отдавать Option<&str> из поля строки.

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