type 別名

2018-08-12 22:03 更新

type 別名

你可以使用 type 關(guān)鍵字聲明另一類型的別名:

type Name = String;

然后,你可以就像使用一個真正的類型一樣使用這種類型:

type Name = String;

let x: Name = "Hello".to_string();

但是請注意,這是一個別名,不完全是一個新類型。換句話說,因?yàn)?Rust 是強(qiáng)類型的,所以你不能比較兩個不同類型:

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 。這常被用在標(biāo)準(zhǔn)庫來為每一部分創(chuàng)建自定義錯誤。例如,io::Result 。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號