类型别名
语法
类型别名组 :
type
标识符 泛型参数组? (:
类型参数约束组 )? Where从句? (=
类型 Where从句?)?;
类型别名 为现有 类型 定义了一个新的名称。类型别名使用关键字 type
进行声明。
每个值都有一个特定的类型,但可以实现多个不同的 trait,或兼容多个不同类型的约束。
例如,以下代码将类型 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); // Doesn't work }
当类型别名不作为关联类型使用时,必须包含一个 类型 ,不能包含 类型参数约束组 。
在 trait 中使用作为 关联类型 的类型别名,不应该包含类型本身的声明 类型 ,但是可以包含类型参数约束声明 类型参数约束组 。
类型别名在 trait impl 中作为 关联类型 使用时,必须包括 类型 ,但不能包括 类型参数约束组 。
在 trait impl 中,位于类型别名等号之前的 where 从句已被弃用 (例如 type TypeAlias<T> where T: Foo = Bar<T>
) 。
首选的是 where 从句位于等号之后 (例如 type TypeAlias<T> = Bar<T> where T: Foo
) 。