Rust项目名称含连字符(-)导入本crate报E0433错误如何解决?
解决方案
你的问题和项目名含连字符无关,核心原因是同一crate内引用自身模块不需要使用包名前缀,可按以下优先级选择方案:
方案1:使用crate::绝对路径(最推荐)
Rust 2018 edition及以上版本,在本项目内引用根路径下的模块,直接以crate::作为路径开头即可,完全不受包名、文件夹名影响:
use crate::schema::posts::dsl::*;
方案2:使用相对路径
根据你当前文件src/biz/music/music.rs的位置,向上回溯到src根目录即可引用schema模块:
use super::super::super::schema::posts::dsl::*;
该方式路径层级随文件位置变化,维护成本更高,不推荐。
方案3:强制启用包名前缀导入
如果确实需要沿用reddwarf_music::的导入格式,在项目根入口文件(二进制项目为src/main.rs,库项目为src/lib.rs)顶部添加如下声明即可:
extern crate self as reddwarf_music;
额外检查项
请先确认你已经在根入口文件中公开声明了schema模块,否则任何路径都无法正常导入:
// 加在src/main.rs或src/lib.rs的顶部 pub mod schema;
补充说明:Cargo自动把包名连字符转下划线的规则仅适用于导入外部依赖crate的场景,本项目内导入自身模块不受该规则约束,你的Cargo.toml中
name字段已经配置为下划线格式,本身也没有连字符相关的配置问题。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

