You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust同文件夹跨文件可见性:如何批量公开符号或合并至main.rs?

Rust多文件代码组织:不用逐个加pub(crate)的两种方法

方法一:把文件直接合并到main.rs里

用Rust的include!宏可以直接把其他文件的内容嵌入到main.rs中,相当于这些文件的代码就是main.rs的一部分,完全不需要处理模块和权限,里面的函数、结构体等不用加任何pub修饰就能直接使用。

举个例子,你的项目结构是:

src/
├── main.rs
├── utils.rs
└── business.rs

在main.rs里这么写:

// 把utils.rs的内容直接嵌到这里
include!("utils.rs");
// 把business.rs的内容嵌到这里
include!("business.rs");

fn main() {
    // 直接调用utils.rs里的函数,不用加模块前缀
    calculate();
    // 直接用business.rs里的结构体
    let obj = Order::new();
}

这种方式的好处是完全不用管模块那一套,跟写单文件一样;但要注意,IDE的代码提示和跳转可能会不太灵敏,而且如果文件之间有依赖,得调整include的顺序——被依赖的文件要先include。

方法二:保留模块但批量公开符号

如果不想破坏模块结构,又不想给每个符号都加pub(crate),可以在每个模块文件的末尾用pub(crate) use self::*;批量导出所有符号。

比如在utils.rs里:

// 正常写代码,不用加pub
fn calculate() { /* ... */ }
struct Config { /* ... */ }
const LIMIT: u32 = 50;

// 一次性把所有符号以crate内可见的权限公开
pub(crate) use self::*;

然后在main.rs里声明模块:

mod utils;
mod business;

fn main() {
    // 可以通过模块名调用
    utils::calculate();
    // 嫌麻烦的话,在main.rs顶部加`use utils::*;` 就能直接调用了
}

如果模块里有不想公开的内部符号,别用self::*,手动列出来就行,比如pub(crate) use {calculate, LIMIT};,这样只有指定的符号会被公开。

内容的提问来源于stack exchange,提问作者corsel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:05:14