rust - 使用类型作为不同的名称和类型别名有什么区别?

标签 rust

有什么区别

use hyper::status::StatusCode as Error;

type Error = hyper::status::StatusCode;

除了type还可以是pub type之外,它们之间还有什么区别吗?使用一种或另一种有什么好处?

最佳答案

在简单类型的情况下,就像在您的示例中一样,似乎没有任何语义差异。此外,usepub 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/

相关文章:

rust - 如何将参数化枚举从泛型类型映射到另一个类型?

rust - 为什么 Rust RwLock 在 fork 时表现异常?

iterator - 在 Rust 中迭代切片的值而不是引用?

sockets - 如何在 Rust 中将 SocketAddr 转换为字符串?

rust - 如何在用户不按 Enter 键的情况下获取键盘输入?

rust - 如何在可以是整数或 float 的泛型类型上调用 `min`?

macros - 有没有办法在 Rust 宏中优先模式匹配中缀操作?

rust - 如何将 number::Rational 转换为十进制数?

rust - 如何将切片的每个元素作为单独的参数传递给可变参数 C 函数?

rust - 为什么要在类型参数之前声明生命周期参数?