You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中加载同级模块文件?以models模块为例

Rust模块间类型引用问题解决

问题场景

我有一个名为models的模块,目录结构包含mod.rs、distribution.rs、item.rs、project.rs、relation.rs。在models/mod.rs中做了重导出:

mod distribution;
mod item;
mod project;
mod relation;

pub use distribution::Distribution;
pub use item::Item;
pub use project::Project;
pub use relation::Relation;

在main.rs中使用这些类型完全正常:

mod models;
use models::Item;
use models::Project;
use models::Relation;
use models::Distribution;

但在models/item.rs中尝试引用Distribution类型时,以下两种写法均报错:

// 写法一:报错
mod models;
use models::Distribution;
// 写法二:报错
mod distribution;
use distribution::Distribution;

解决方法

方法一:利用上层模块的重导出(推荐)

因为models/mod.rs已经将Distribution重导出为公共类型,在item.rs中可以通过相对路径引用上层模块:

use super::Distribution;

这里的super指向item.rs的父模块(即models模块,对应mod.rs),直接复用已有的重导出即可。

方法二:通过crate根路径直接引用

从crate的根目录出发,明确指定Distribution的完整路径:

use crate::models::Distribution;

或者直接引用distribution模块的类型:

use crate::models::distribution::Distribution;

方法三:将子模块设为公共模块(可选)

如果需要直接在同级模块间引用子模块,可以在models/mod.rs中将distribution声明为pub mod:

pub mod distribution; // 修改为pub mod
mod item;
mod project;
mod relation;

pub use distribution::Distribution;
// ... 其他重导出保持不变

之后在item.rs中就可以直接引用同级的公共模块:

use super::distribution::Distribution;

错误原因说明

  • 写法一中的mod models;是错误的:item.rs本身属于models模块,不能在子模块内再次声明父模块。
  • 写法二中的mod distribution;会尝试将distribution作为item的子模块加载,但实际distribution是和item同级的模块,并非item的子模块,因此编译器找不到对应的文件。

内容的提问来源于stack exchange,提问作者Yuri Gor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:25:21