Rust-Prelude

49 阅读1分钟

在编写Rust程序时,我们对标准库中的type、trait、function和macro的使用非常频繁,因此Rust提供了一个Prelude(预导入)模块,它的内容会被编译器自动导入到每个Rust模块的作用域中。

Rust这么做是为了让开发者能够立即使用一些最常用、最基础的类型、trait 和函数,而不需要每次都手动写一长串 use 声明。

Prelude 的核心目的是为开发者提供便利性。它包含了:

  1. 最常用的类型:例如 String, Vec, Option, Result
  2. 最常用的 Trait:例如 Copy, Clone, Drop, Default
  3. 基本的 I/O 宏:例如 println!, eprintln!, dbg!

避免了每次使用这些标准库提供的内容都需要自己添加use:

use std::vec::Vec;
use std::iter::Iterator;
use std::convert::From; // 假设 collect 需要 From

fn main() {
    // ...
}

我们可以使用#![no_implicit_prelude]禁用默认的标准Preclude:

#![no_implicit_prelude] // 禁用标准 prelude

fn main() {
    // 编译会失败!因为 Vec 和 println! 都没有被导入
    // let v = vec![1, 2, 3]; 
    // println!("Hello"); 
}

在开发大型库(Crate)时,通常会创建自己的 Crate Prelude。这是一种最佳实践,可以为库的用户提供一套精选的常用类型和 Trait,使他们的开发更加便捷。 一个名为 my_library 的库可能会有一个 my_library::prelude 模块,用户可以像这样导入:

use my_library::prelude::*; 

fn main() {
    // ...
}