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

Индекс для своего типа в Rust

Скобки у своего типа опираются на стандартный трейт индекса. Он позволяет вернуть ссылку на элемент. Тип номера задают отдельно: для списка в памяти часто берут usize, как у среза и вектора. Номер должен попадать в диапазон хранилища: плохой индекс останавливает программу так же, как при прямом обращении к элементу вектора вне длины.

Соберем структуру с вектором строк и опишем чтение по номеру:

struct Shelf { items: Vec<String>, } impl std::ops::Index<usize> for Shelf { type Output = String; fn index(&self, i: usize) -> &String { &self.items[i] } } fn main() { let shelf = Shelf { items: vec![ String::from("a"), String::from("b"), ], }; let first = &shelf[0]; println!("{}", first); }

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

struct Row { cells: Vec<i32>, }

Сделайте чтение ячейки по usize через скобки у Row, соберите значение с тремя числами, выведите среднее по индексу 1.

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

struct Tags { names: Vec<String>, }

Оформите доступ к строке по номеру у Tags, заполните два имени, выведите второе через скобки.

Скажите, почему метод трейта индекса возвращает ссылку, а не копию строки из вектора.

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