Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Псевдонимы типов

Syntax
TypeAlias
    type IDENTIFIER GenericParams? ( : TypeParamBounds )?
        WhereClause?
        ( = Type WhereClause? )? ;

Псевдоним типа определяет новое имя для существующего типа в пространстве имён типов модуля или блока, где он находится. Псевдонимы типов объявляются с ключевым словом type. Каждое значение имеет единственный, конкретный тип, но может реализовывать несколько различных трейтов и может быть совместимо с несколькими различными ограничениями типов.

Например, следующее определяет тип Point как синоним типа (u8, u8), типа пар 8-битных целых чисел без знака:

#![allow(unused)]
fn main() {
type Point = (u8, u8);
let p: Point = (41, 68);
}

Псевдоним типа для кортежной структуры или единичной структуры не может использоваться для квалификации конструктора этого типа:

#![allow(unused)]
fn main() {
struct MyStruct(u32);

use MyStruct as UseAlias;
type TypeAlias = MyStruct;

let _ = UseAlias(5); // OK
let _ = TypeAlias(5); // Не работает
}

Псевдоним типа, когда не используется как ассоциированный тип, должен включать Тип и не может включать TypeParamBounds.

Псевдоним типа, когда используется как ассоциированный тип в трейте, не должен включать спецификацию Типа, но может включать TypeParamBounds.

Псевдоним типа, когда используется как ассоциированный тип в реализации трейта, должен включать спецификацию Типа и не может включать TypeParamBounds.

Where-предложения перед знаком равенства в псевдониме типа в реализации трейта (например, type TypeAlias<T> where T: Foo = Bar<T>) устарели. Where-предложения после знака равенства (например, type TypeAlias<T> = Bar<T> where T: Foo) предпочтительны.