Rust项目中use与crate关键字使用异常问题排查
为什么在混合Rust项目中
use crate::Draw或use super::Draw无法工作,而use use_tutorial::Draw可以? 先明确你的项目结构本质:这是一个混合crate项目——src/lib.rs是独立的库crate(名称为use_tutorial),src/main.rs是另一个独立的二进制crate,二者属于完全不同的crate上下文,并非同一个crate内的模块关系。
各导入语句的具体原因
use use_tutorial::Draw能正常运行
同项目下的二进制crate会自动依赖同名的库crate,因此你可以直接通过库crate的名称use_tutorial,导入其公开导出的Drawtrait。use crate::Draw失效crate关键字指代当前所在的crate,也就是main.rs所属的二进制crate。这个二进制crate内部并没有定义Drawtrait,编译器自然找不到该符号。use super::Draw失效super关键字指代当前模块的父模块。main.rs是二进制crate的根模块,不存在父模块;即便存在,父模块中也没有Drawtrait,因此无法完成导入。
可选的调整方案(如果想使用类似crate::的导入方式)
- 把
Drawtrait直接定义在main.rs中(但会失去lib.rs的复用能力); - 将main.rs改为库crate的子模块(比如在lib.rs中添加
pub mod main;,并调整文件结构),但这种方式不符合Rust项目的常规组织逻辑,不推荐。
内容的提问来源于stack exchange,提问作者flywen
相关产品推荐
相关产品推荐

