你可以使用 type 關(guān)鍵字聲明另一類型的別名:
type Name = String;
然后,你可以就像使用一個真正的類型一樣使用這種類型:
type Name = String;
let x: Name = "Hello".to_string();
但是請注意,這是一個別名,不完全是一個新類型。換句話說,因為 Rust 是強類型的,所以你不能比較兩個不同類型:
let x: i32 = 5;
let y: i64 = 5;
if x == y {
// ...
}
這會產(chǎn)生這樣的結(jié)果:
error: mismatched types:
expected `i32`,
found `i64`
(expected i32,
found i64) [E0308]
if x == y {
^
但是,如果我們有一個別名:
type Num = i32;
let x: i32 = 5;
let y: Num = 5;
if x == y {
// ...
}
這個編譯沒有錯誤。無論如何,Num 類型的值和 i32 類型的值是相同的。
你還可以使用泛型類型別名:
use std::result;
enum ConcreteError {
Foo,
Bar,
}
type Result<T> = result::Result<T, ConcreteError>;
這將創(chuàng)建一個 Result 類型的專門的版本 ,它總是有一個針對 Result< T E >
的 E 部分的 ConcreteError 。這常被用在標準庫來為每一部分創(chuàng)建自定義錯誤。例如,io::Result
。