有什么区别
use hyper::status::StatusCode as Error;
Run Code Online (Sandbox Code Playgroud)
和
type Error = hyper::status::StatusCode;
Run Code Online (Sandbox Code Playgroud)
他们之间是否还有其他差异,除此之外也type可以pub type?使用这一个或另一个有什么好处?
在简单类型的情况下,如在您的示例中,似乎没有任何语义差异.此外,还有一个直接模拟与use到pub type,它是pub use:
// will be available to other modules
pub use hyper::status::StatusCode as Error;
Run Code Online (Sandbox Code Playgroud)
但是,在更复杂的情况下存在差异.例如,您可以为专用泛型类型定义泛型类型别名或别名:
type Result<T> = ::std::result::Result<T, MyError>;
type OptionI32 = Option<i32>;
Run Code Online (Sandbox Code Playgroud)
一般的想法是你通常使用类型别名,因为它们更强大,并且更明确地建议意图,比如Result,use .. as ..当你只想导入那个特定的名称时它会使用,但它与当前命名空间中已有的东西冲突:
use std::io::Read as StdRead;
trait Read: StdRead { ... }
Run Code Online (Sandbox Code Playgroud)
请注意,使用路径限定标识符应优先use重命名.以上写得更好
use std::io;
trait Read: io::Read { ... }
Run Code Online (Sandbox Code Playgroud)
(当然,除非Read方法用于同一文件中的某些具体类型).
使用use .. as ..替代type(在可能的情况下)是不常见的,我认为应该避免.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |