7
use hyper::status::StatusCode as Error;
和
type Error = hyper::status::StatusCode;
之間的差別相同,只不過type
它們之間的任何更多的不同可也pub type
?使用這個或另一個有什麼好處?
use hyper::status::StatusCode as Error;
和
type Error = hyper::status::StatusCode;
之間的差別相同,只不過type
它們之間的任何更多的不同可也pub type
?使用這個或另一個有什麼好處?
在簡單類型的情況下,就像在你的例子中,似乎沒有任何語義差異。此外,還有一個直接模擬與use
到pub type
,這是pub use
:
// will be available to other modules
pub use hyper::status::StatusCode as Error;
然而,也有更復雜的情況不同。例如,你可以定義泛型類型的別名或別名專門泛型類型:
type Result<T> = ::std::result::Result<T, MyError>;
type OptionI32 = Option<i32>;
總的想法是,你平時使用類型別名,因爲他們更強大和建議的意圖更加明確,像Result
,和您使用use .. as ..
,當你只想要導入的具體名稱,但它的東西是已經在當前的命名空間衝突:
use std::io::Read as StdRead;
trait Read: StdRead { ... }
注意,使用路徑限定標識符應首選use
重命名。以上是更好寫成
use std::io;
trait Read: io::Read { ... }
(除非被用於在相同的文件中的一些具體類型的課程,Read
方法)。
使用use .. as ..
作爲type
的替代品(在有可能的情況下)是罕見的,我認爲這應該是可以避免的。