【发布时间】:2020-11-25 16:56:02
【问题描述】:
我阅读了HashMap 上的文档,我知道他们可以拥有alternate custom types。这个例子在文档中给出:
type Accounts<'a> = HashMap<Account<'a>, AccountInfo<'a>>;
let mut accounts: Accounts = HashMap::new();
我宁愿不定义显式类型。我有一个函数需要一个可变的HashMap<PathBuf, bool>:
pub fn parse(
visited: &mut HashMap<PathBuf, bool>,
path: PathBuf,
) -> Result<(), Box<dyn std::error::Error>> {
unimplemented!()
}
在我的“main”函数中,我这样调用“parse”:
let mut visited = HashMap::new();
parse(&mut visited, args.path)?;
代码可以编译,但我想在创建visited 变量时更明确地定义类型。看起来下面的语法不正确:
let mut visited = HashMap<PathBuf, bool>::new();
有什么办法吗?
【问题讨论】:
-
compiler tells you the correct syntax:
help: use `::<...>` instead of `<...>` to specify type arguments -
我平时都是跟着编译器走的,但这次错过了这个提示。
-
嘿@Shepmaster 我了解 StackOverflow 无情地修剪冗余问题的做法,但我不认为我发布了 What is the proper way to create a new generic struct? 的副本。我的问题更具体,它是关于在初始化 HashMap 时如何定义类型,而另一个是关于结构类型。您会考虑删除“重复”标签吗?
-
A
HashMap是一个结构,所以我看不出有什么区别。对于“如何初始化Vec或BTreeMap或 ...”,我也会这样做。请记住,重复的还不错,它们没有被“修剪”。这将永远存在,答案也将永远存在。此外,正如重复的横幅所说:“这个问题已经在这里有答案”,而不是“这是同一个问题”。这是关于重复的答案,而不是问题。 -
哦,好的,谢谢您的解释。我不确定重复项会在网站上停留多长时间。