Rust库模块按文件夹组织:如何简化导入避免重复名称?
解决方案:可行,通过子模块重导出实现
完全可以保留现有文件夹结构,同时让结构体直接隶属于models模块、trait直接隶属于traits模块,只需在对应文件夹的mod.rs中使用pub use进行重导出即可,不会把所有类型放到core根命名空间下。
步骤1:修改models/mod.rs
将原来的子模块声明改为私有导入+公开重导出:
// 私有导入子模块(仅内部可见,避免暴露冗余的子模块层级) mod document; mod user; // 把各文件中的结构体重导出到`models`模块下 pub use document::Document; pub use user::User;
同时确保document.rs里的结构体符合Rust命名规范(大驼峰):
// src/models/document.rs pub struct Document { // 结构体字段定义 }
步骤2:修改traits/mod.rs
同理处理trait模块:
// 私有导入子模块 mod documents; mod users; // 把各文件中的trait重导出到`traits`模块下 pub use documents::Documents; pub use users::Users;
trait文件示例(traits/documents.rs):
pub trait Documents { // trait方法定义 }
步骤3:保持lib.rs不变
依然保留原有的模块导出:
pub mod models; pub mod traits;
最终效果
现在你可以直接通过目标模块层级导入类型,无需重复文件名:
use core::models::Document; use core::traits::Documents;
这种方式既保留了“每个类型单独一个文件”的结构,又简化了外部导入路径,同时严格维持了models和traits的命名空间划分,不会污染根模块。
内容的提问来源于stack exchange,提问作者Walter
相关产品推荐
相关产品推荐

