Rust如何将struct实现拆分到独立文件且不新增子模块层级
实现方法
完全可以通过Rust原生的pub use重导出特性实现,不需要修改任何配置,操作步骤如下:
- 先确认你的文件结构最终如下:
项目根目录 ├── main.rs(原有代码无需修改) └── tools ├── mod.rs ├── terminal.rs └── terminal_factory.rs
- 将原
tools/mod.rs中Terminal相关的代码全部迁移到tools/terminal.rs中:
pub struct Terminal { id: u32, pub name: String } impl Terminal { pub fn get_id(&self) -> u32 { self.id } } impl std::fmt::Display for Terminal { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "TERMINAL#{} ({})", self.id, self.name) } }
- 将原
tools/mod.rs中TerminalFactory相关的代码全部迁移到tools/terminal_factory.rs中,注意导入同模块的Terminal:
use super::Terminal; pub struct TerminalFactory { next_id: u32 } impl TerminalFactory { pub fn new() -> TerminalFactory { TerminalFactory { next_id: 0 } } pub fn create(&mut self, name: String) -> Terminal { self.next_id += 1; Terminal { id: self.next_id, name } } }
- 修改
tools/mod.rs内容如下,声明子模块后将两个结构体重导出到tools模块顶层:
mod terminal; mod terminal_factory; pub use terminal::Terminal; pub use terminal_factory::TerminalFactory;
效果说明
上述操作完成后,原有main.rs的代码不需要做任何修改,仍然可以通过tools::Terminal、tools::TerminalFactory访问对应结构体,符合你的预期。该方案是Rust官方推荐的模块拆分方案,仅用Rust原生语法实现,不需要依赖cargo或任何配置文件,直接用rustc main.rs即可正常编译。
内容的提问来源于stack exchange,提问作者pid
相关产品推荐
相关产品推荐

