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

Rust如何将struct实现拆分到独立文件且不新增子模块层级

实现方法

完全可以通过Rust原生的pub use重导出特性实现,不需要修改任何配置,操作步骤如下:

  1. 先确认你的文件结构最终如下:
项目根目录
├── main.rs(原有代码无需修改)
└── tools
    ├── mod.rs
    ├── terminal.rs
    └── terminal_factory.rs
  1. 将原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)
    }
}
  1. 将原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
        }
    }
}
  1. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:27:04