在引用标准库或者第三方库时,如果本地有同名的模块,可以在引用前增加 :: 强制 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,);
}