G.MOD.01 使用导入模块中的类型或函数,在某些情况下需要带模块名前缀

【级别】 建议

【描述】

对于标准库中,很多人都熟知的类型 ,比如 Arc/ Rc/ Cell/ HashMap 等 , 可以导入它们直接使用。

但是对于可能引起困惑的函数,比如 std::ptr::replacestd::mem::replace ,在使用它们的时候,就必须得带上模块前缀。

使用一些第三方库中定义的类型或函数,也建议带上crate或模块前缀。如果太长的话,可以考虑使用 astype 来定义别名。

以上考虑都是为了增强代码的可读性、可维护性。

【正例】


#![allow(unused)]
fn main() {
use std::sync::Arc;
let foo = Arc::new(vec![1.0, 2.0, 3.0]); // 直接使用 Arc
let a = foo.clone();

// 需要带上 ptr 前缀
use std::ptr;
let mut rust = vec!['b', 'u', 's', 't'];
// `mem::replace` would have the same effect without requiring the unsafe
// block.
let b = unsafe {
    // 符合
    ptr::replace(&mut rust[0], 'r')
};
}