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

Перевод типов через From и Into в Rust

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

Оформим метры как обертку над числом:

struct Meters(i32); impl From<i32> for Meters { fn from(n: i32) -> Self { Meters(n) } } fn main() { let raw = 12; let distance = Meters::from(raw); println!("{}", distance.0); }

На экране 12. Вызов идет через Meters::from: компилятор подставляет тип результата по имени структуры. Такой путь читается, когда источник данных важен в сигнатуре.

Рядом с From работает парный Into: его вызывают у исходного значения через точку. Результат тот же, меняется только форма записи. Если для пары типов уже есть From, Into для обратного направления компилятор подключает сам, отдельный блок для него писать не нужно:

struct Meters(i32); impl From<i32> for Meters { fn from(n: i32) -> Self { Meters(n) } } fn main() { let raw = 7; let distance: Meters = raw.into(); println!("{}", distance.0); }

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

struct Level(i32); let step = 5;

Выполните стандартный перевод из i32 в Level и получите значение через Level::from. Выведите поле.

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

struct Count(u32); let n = 3u32;

Запишите перевод из u32 и соберите Count через into у переменной n. Выведите число внутри.

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

struct Code(i32); let value = -2;

Сделайте перевод из i32 в Code и сохраните результат в переменную с явным типом Code через into. Выведите поле.

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