前言
在 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 中被正确地引入。
步骤
-
在
lib.rs中引入模块首先,你需要在
lib.rs中引入这两个模块。如果lib.rs还没有这两个模块的声明,你需要添加它们:// crates/config/src/lib.rs pub mod validate; pub mod compile_game_json; -
在
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 中正确声明模块是关键的一步。