РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
519 of 1245 menu

Newtype

Newtype - это идиома в Rust, которая позволяет создать новый тип на основе уже существующего с помощью tuple-структуры с одним полем. Такой подход даёт возможность добавить типовую безопасность, реализовать свои трейты или скрыть внутреннее представление данных. Синтаксически newtype объявляется как struct с одним неименованным полем.

Синтаксис

struct NewType(ExistingType);

Пример

Давайте создадим newtype Meters на основе типа f64 и выведем значение:

struct Meters(f64); fn main() { let distance = Meters(5.0); println!("{}", distance.0); }

Результат выполнения кода:

5.0

Пример

Давайте реализуем метод для newtype Meters, который возвращает значение в метрах:

struct Meters(f64); impl Meters { fn value(&self) -> f64 { self.0 } } fn main() { let distance = Meters(5.0); println!("{}", distance.value()); }

Результат выполнения кода:

5.0

Пример

Давайте создадим newtype UserId на основе u32 и newtype UserName на основе String, чтобы избежать путаницы типов:

struct UserId(u32); struct UserName(String); fn main() { let id = UserId(1); let name = UserName(String::from("abcde")); println!("{}", id.0); println!("{}", name.0); }

Результат выполнения кода:

1 "abcde"

Смотрите также

  • ключевое слово struct,
    которое объявляет структуру
  • tuple-struct,
    на основе которого строится newtype
  • derive,
    который позволяет автоматически реализовать трейты для newtype
  • impl,
    который добавляет методы к newtype
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить