在引用标准库或者第三方库时,如果本地有同名的模块,可以在引用前增加 ::
强制 rust 从 crate 的根模块去查找模块,这样可以确保引用到 rust 标准库中的模块,如: use ::std::collections::HashMap
, 而如果使用 use std::collections::HashMap
去引用的话会引用到当前 crate 中的同名模块,如下面这个例子中,_empty
变量通过 ::
将类型申明为了标准库中的 Hashmap
, 如果没有 ::
,类型会被解析成当前模块中定义的 HashMap
:
#[test]
#[ignore]
fn type_override() {
mod std {
pub mod collections {
pub struct HashMap;
impl HashMap {
#[allow(dead_code)]
pub fn new() -> Self {
panic!("Do not allow users to override which HashMap is used");
}
#[allow(dead_code)]
pub fn insert<K, V>(&mut self, _key: K, _val: V) {
panic!("Do not allow users to override which HashMap is used");
}
}
}
}
let _empty: ::std::collections::HashMap<(), ()> = hashmap!();
let _without_comma = hashmap!(1 => 2, 3 => 4);
let _with_trailing = hashmap!(1 => 2, 3 => 4,);
}