Rust中如何声明文件名含点的模块并正确引用?
解决Rust带后缀点的模块文件导入问题
问题原因
Rust编译器默认会将文件名中的.解析为模块嵌套层级,比如module.suffix1.rs会被认为是module子目录下的suffix1.rs,但你的文件实际直接放在module1目录下,所以原代码的pub use module.suffix1;会找不到对应模块,导致报错。
实现方法
需要通过#[path]属性手动指定模块对应的文件路径,先在module1/mod.rs中声明模块,再导出:
// module1/mod.rs // 声明模块并绑定到对应的带点文件名 #[path = "module.suffix1.rs"] pub mod suffix1; #[path = "module.suffix2.rs"] pub mod suffix2; #[path = "module.suffix3.rs"] pub mod suffix3; // 直接导出模块(与原代码意图匹配) pub use self::suffix1; pub use self::suffix2; pub use self::suffix3; // 可选:给模块起别名,贴近你原本的命名习惯 pub use self::suffix1 as module_suffix1; pub use self::suffix2 as module_suffix2; pub use self::suffix3 as module_suffix3;
之后在main.rs中就可以正常导入使用:
// main.rs use module1::suffix1; // 或者用别名 use module1::module_suffix1;
关于命名规范的说明
Rust官方推荐使用**蛇形命名法(snake_case)**作为文件名和模块名的规范,但带点的文件名本身是允许的——只是需要手动通过#[path]处理模块与文件的绑定,避免编译器的默认嵌套解析逻辑干扰。如果觉得下划线命名杂乱,使用带点的命名方式是可行的,只是需要多写几行模块声明代码。
内容的提问来源于stack exchange,提问作者Roman Mahotskyi
相关产品推荐
相关产品推荐

