类型别名
语法
TypeAlias :
type标识符 泛型参数? (:类型参数约束 )? Where 子句? (=类型 Where 子句?)?;
类型别名 为现有 类型 定义了一个新名称,它位于的模块或块的 类型命名空间 中。类型别名使用关键字 type 声明。每个值都有一个单一、特定的类型,但可能实现多个不同的 trait,并且可能与多个不同的类型约束兼容。
例如,下面将类型 Point 定义为类型 (u8, u8) 的同义词,即无符号 8 位整数对的类型
#![allow(unused)] fn main() { type Point = (u8, u8); let p: Point = (41, 68); }
tuple-struct 或 unit-struct 的类型别名不能用于限定该类型的构造函数
#![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 实现 中作为 关联类型 使用时,必须包含一个 类型 规范并且不能包含 类型参数约束。
在 trait 实现 中的类型别名上,位于等号 (`=`) 前的 Where 子句 (例如 type TypeAlias<T> where T: Foo = Bar<T>) 已被废弃。等号 (`=`) 后的 Where 子句 (例如 type TypeAlias<T> = Bar<T> where T: Foo) 是首选用法。