Rust 笔记:pub(crate) fn 说明

171 阅读1分钟

前言

在 Rust 中,当你在一个模块中定义了一个 pub(crate) 函数时,这个函数可以在同一个 crate 内的其他模块中使用。pub(crate) 的可见性意味着这个函数对整个 crate 是公开的,但对外部 crate 是不可见的。

假设你的 crate 的目录结构如下:

crates/
└── config/
    └── src/
        ├── lib.rs
        ├── validate.rs
        └── compile_game_json.rs

validate.rs 中,你定义了一个 pub(crate) 函数:

// crates/config/src/validate.rs

pub(crate) fn validate_json() {
    // 函数实现
}

要在 compile_game_json.rs 中使用这个函数,你需要确保两个模块都在 lib.rs 中被正确地引入。

步骤

  1. lib.rs 中引入模块

    首先,你需要在 lib.rs 中引入这两个模块。如果 lib.rs 还没有这两个模块的声明,你需要添加它们:

    // crates/config/src/lib.rs
    
    pub mod validate;
    pub mod compile_game_json;
    
  2. compile_game_json.rs 中使用 validate_json

    现在,你可以在 compile_game_json.rs 中使用 validate_json 函数。你需要通过模块路径来调用该函数:

    // crates/config/src/compile_game_json.rs
    
    // 引入 validate 模块
    use crate::validate;
    
    fn some_function() {
        // 调用 validate_json 函数
        validate::validate_json();
    }
    

解释

  • 模块路径:通过 use crate::validate;,你可以使用 validate::validate_json() 来调用函数。crate 关键字表示当前 crate 的根模块。
  • 模块声明:在 lib.rs 中声明模块是必要的,这样 Rust 编译器才能知道如何找到和编译这些模块文件。

通过这种方式,你可以在同一个 crate 中的不同模块之间共享 pub(crate) 函数。确保在 lib.rs 中正确声明模块是关键的一步。