Rust如何跨文件正确导入模块?解决模块未找到报错问题
修复Rust模块引用错误的方法
问题原因
在Rust中,mod default;的作用是声明当前模块的子模块,而非引入已有的同级模块。你在main.rs中写mod default;有效,是因为main.rs是crate的根文件,它会自动加载同目录下的default.rs作为根模块的子模块。但在difficult.rs中写mod default;时,Rust会尝试在difficult.rs的同级目录(或子目录)寻找default.rs,找不到就会报错。
修复步骤
1. 在根文件中声明所有同级模块
在main.rs中同时声明default和difficult模块,让Rust将这两个文件都识别为crate的根级子模块:
// main.rs mod default; mod difficult; fn main() { let _info = default::Info; default::f(); }
2. 在difficult.rs中正确引用default模块的内容
不需要再写mod default;,而是通过以下两种方式访问:
- 方式一:使用绝对路径(从crate根开始)
// difficult.rs pub fn use_default() { let _info = crate::default::Info; crate::default::f(); }
- 方式二:用use语句导入简化代码
// difficult.rs use crate::default::{Info, f}; pub fn use_default() { let _info = Info; f(); }
补充说明
Rust的模块遵循单一根入口规则:所有同级模块都需要在crate根文件(main.rs或lib.rs)中声明,其他模块想要跨模块访问内容,必须通过crate::开头的绝对路径,或者通过use语句导入目标内容。
内容的提问来源于stack exchange,提问作者dubugger
相关产品推荐
相关产品推荐

