有什么区别
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 ..
当您只想导入该特定名称但它与当前 namespace 中已有的内容冲突时:
use std::io::Read as StdRead;
trait Read: StdRead { ... }
请注意,使用路径限定标识符应优先于使用
重命名。上面最好写成
use std::io;
trait Read: io::Read { ... }
(当然,除非 Read
方法用于同一文件中的某些具体类型)。
使用 use .. as ..
代替 type
(在可能的情况下)并不常见,我认为应该避免。
关于rust - 使用类型作为不同的名称和类型别名有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38072757/