Ключевое слово type
Определение псевдонима для существующего типа.
Синтаксис: type Имя = СуществующийТип;
Примеры
type не создаёт новый тип:
#![allow(unused)] fn main() { type Meters = u32; type Kilograms = u32; let m: Meters = 3; let k: Kilograms = 3; assert_eq!(m, k); }
Тип может быть обобщённым (generic):
#![allow(unused)] fn main() { type ArcMutex<T> = Arc<Mutex<T>>; }
В трейтах type используется для объявления ассоциированного типа:
#![allow(unused)] fn main() { trait Iterator { // объявление ассоциированного типа type Item; fn next(&mut self) -> Option<Self::Item>; } struct Once<T>(Option<T>); impl<T> Iterator for Once<T> { // определение ассоциированного типа type Item = T; fn next(&mut self) -> Option<Self::Item> { self.0.take() } } }
Тип может быть обобщённым (generic):
#![allow(unused)] fn main() { type ArcMutex<T> = Arc<Mutex<T>>; }
В трейтах type используется для объявления ассоциированного типа:
#![allow(unused)] fn main() { trait Iterator { // объявление ассоциированного типа type Item; fn next(&mut self) -> Option<Self::Item>; } struct Once<T>(Option<T>); impl<T> Iterator for Once<T> { // определение ассоциированного типа type Item = T; fn next(&mut self) -> Option<Self::Item> { self.0.take() } } }