如何使用特定的键和值类型初始化 HashMap?
How do I initialise a HashMap with specific key and value types?
我阅读了 HashMap
and I understand that they can have 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();
有什么办法吗?
表达式(相对于类型)中泛型的参数需要额外的 ::
。正确的语法是:
let mut visited = HashMap::<PathBuf, bool>::new();
这种构造有时被称为“turbofish”。我找不到关于它的规范参考(这个词出现 only once in the Book), but this article 非常好。
评论示例:
use std::collections::HashMap;
use std::path::PathBuf;
fn parse(visited: &mut HashMap<PathBuf, bool>) {}
fn main() {
// explicit type annotation
let mut visited: HashMap<PathBuf, bool> = HashMap::new();
// turbo-fish
let mut visited = HashMap::<PathBuf, bool>::new();
// the compiler can infer type from use
let mut visited = HashMap::new();
parse(&mut visited); // compiler can tell visited must be HashMap<PathBuf, bool>
}
您可以使用 turbofish 语法绑定到通用参数:
let mut visited = HashMap::<PathBuf, bool>::new();
或添加类型注解:
let mut visited: HashMap<PathBuf, bool> = HashMap::new();
我阅读了 HashMap
and I understand that they can have 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();
有什么办法吗?
表达式(相对于类型)中泛型的参数需要额外的 ::
。正确的语法是:
let mut visited = HashMap::<PathBuf, bool>::new();
这种构造有时被称为“turbofish”。我找不到关于它的规范参考(这个词出现 only once in the Book), but this article 非常好。
评论示例:
use std::collections::HashMap;
use std::path::PathBuf;
fn parse(visited: &mut HashMap<PathBuf, bool>) {}
fn main() {
// explicit type annotation
let mut visited: HashMap<PathBuf, bool> = HashMap::new();
// turbo-fish
let mut visited = HashMap::<PathBuf, bool>::new();
// the compiler can infer type from use
let mut visited = HashMap::new();
parse(&mut visited); // compiler can tell visited must be HashMap<PathBuf, bool>
}
您可以使用 turbofish 语法绑定到通用参数:
let mut visited = HashMap::<PathBuf, bool>::new();
或添加类型注解:
let mut visited: HashMap<PathBuf, bool> = HashMap::new();