Types 在Rust中重新定义类型并对其调用函数

Types 在Rust中重新定义类型并对其调用函数,types,rust,Types,Rust,在Go中,您可以执行以下操作来定义一个自定义类型,该类型将阴影覆盖到现有类型: type Header map[string][]string 然后,您可以使用与映射[string][]string相同的方式访问标题类型 我试着用Rust做同样的事情,但我遇到了问题: pub type Header = collections::HashMap<String, Vec<String>>; fn main() { let h = Header::new(); }

在Go中,您可以执行以下操作来定义一个自定义类型,该类型将阴影覆盖到现有类型:

type Header map[string][]string
然后,您可以使用与映射[string][]string相同的方式访问标题类型

我试着用Rust做同样的事情,但我遇到了问题:

pub type Header = collections::HashMap<String, Vec<String>>;
fn main() {
    let h = Header::new();
}
pub-type Header=collections::HashMap;
fn main(){
设h=Header::new();
}

您可以调用HashMap::new(),(2014年12月8日访问)。为什么我不能调用Header::new()?

A
type
alias纯粹是该类型的别名。它根本没有别名名称空间,因此您仍然需要编写
HashMap::new()

值得注意的是,您也不能impl Header{fn new()->Header},因为:'不能将方法与定义类型的板条箱之外的类型相关联;定义并实现一个特征或新类型,而不是[E0116]“这对我来说就像一个bug。@道格:这纯粹是一个别名
impl头{…}
完全等同于
impl HashMap{…}
。没有错误。@ChrisMorgan如果它是一个正确的别名(例如使用foo::Bar作为foo),您可以使用foo::new()而不会出现问题。这不起作用肯定是个bug吗?@Doug:这不是天生的bug;这只是一些行为不同的东西。它已经定义了一个类型别名,仅此而已。(它可能没有达到您预期的效果,但这并不意味着它是一个bug您所绘制的并行只是一个并行,这两件事绝对不同。)我想我听到一些核心开发人员说它打算“在某个时候”工作,你有什么消息吗?关于这个话题我没有进一步的消息。这样的东西几乎是向后兼容的,但并不完全兼容(除了添加方法可能产生的不兼容之外,别名上的任何impl都可能停止对基类型的工作,这取决于它是如何实现的)。