【发布时间】:2022-01-11 05:51:54
【问题描述】:
我刚刚开始学习 rust 并且在包含文件时遇到了麻烦。
所以我的问题是,当我想在b.rs 中使用来自a.rs 的struct 时,我让它工作的唯一方法是通过绝对路径。所以use crate::stuff::a::StructA;。根据我的阅读,我应该可以在这里使用mod,因为它在同一个模块中。
回答我的问题,对于具有 c/c++ 和 python 背景的人,我应该如何正确地包含内容? (因为这个绝对路径真的感觉很不方便。)
目录结构:
src
├── stuff
│ ├── a.rs
│ ├── b.rs
│ └── c.rs
├── stuff.rs
└── main.rs
b.rs:
use crate::stuff::a::StructA;
/* doesn't work
mod stuff;
use stuff::a::StructA;
*/
/* doesn't work
mod a;
use a::StructA;
*/
// Works but why should I define the path. It's in the same dir/mod.
#[path = "a.rs"]
mod a;
use a::StructA;
stuff.rs:
pub mod a;
pub mod b;
pub mod c;
main.rs:
use crate::stuff::a::StructA;
use crate::stuff::b::StructB;
use crate::stuff::c::StructC;
fn main() {
let a = StructA::new();
let b = StructB::new(a);
let c = StructC::new(a, b);
}
b.rs 和 c.rs 使用 a.rs 的部分内容。 main.rs 使用 a.rs、b.rs 和 c.rs。
编辑:
我也读过不推荐使用mod.rs。
【问题讨论】:
-
你见过How do I import from a sibling module? 你会通过
use super::a::StructA将StructA导入b.rs。 -
这能回答你的问题吗? How do I import from a sibling module?