如何保持 mod 私有并在 Rust 中同一项目的另一个模块中使用它?

Fin*_*ber 1 visibility module rust

所以我想定义一些模块lib.rs但不公开它们,但只能在项目中使用。

在 my 中lib.rs,如果我有这样的定义:

pub mod args;
Run Code Online (Sandbox Code Playgroud)

在我的中main.rs,我可以args这样使用模块:

use my_lib::args::Cli;
Run Code Online (Sandbox Code Playgroud)

其中my_lib定义Cargo.tml

[lib]
name = "my_lib"
path = "src/lib.rs"
Run Code Online (Sandbox Code Playgroud)

但我不想pub mod args;。我尝试更改为,pub(crate) mod args;但这会导致编译错误,args无法找到模块。

如何使args定义的模块lib.rs可用而不需要给予它最宽松的可见性?

caf*_*e25 5

lib.rs由于 Rust 将库和二进制文件分离到单独的板条箱中,因此没有main.rs简单的方法来包含.lib.rspubmain.rs

我建议你遵循大板条箱的方式(serde想到的)并添加一个pub mod __private;传达含义的符号。您还可以对其进行注释,#[doc(hidden)]以将其隐藏在文档中,使其更加明显。