Import 如何使用Cargo/Rust在模块中包含来自同一目录的文件?
我有一个Cargo项目,由同一目录中的三个文件组成:Import 如何使用Cargo/Rust在模块中包含来自同一目录的文件?,import,module,rust,rust-cargo,Import,Module,Rust,Rust Cargo,我有一个Cargo项目,由同一目录中的三个文件组成:main.rs、mod1.rs和mod2.rs 我想将函数从mod2.rs导入mod1.rs,就像我将函数从mod1.rs导入main.rs一样 我已经阅读了所需的文件结构,但我不明白-命名所有导入的文件mod将导致编辑器中的小混乱,而且这只会使项目层次结构复杂化 有没有一种方法可以独立于目录结构导入/包含文件,如我在Python或C++中所做的那样?p> main.rs: mod mod1; // Works fn main() {
main.rs
、mod1.rs
和mod2.rs
我想将函数从mod2.rs
导入mod1.rs
,就像我将函数从mod1.rs
导入main.rs
一样我已经阅读了所需的文件结构,但我不明白-命名所有导入的文件
mod
将导致编辑器中的小混乱,而且这只会使项目层次结构复杂化
有没有一种方法可以独立于目录结构导入/包含文件,如我在Python或C++中所做的那样?p> main.rs:
mod mod1; // Works
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}
mod1.rs:
mod mod2; // Fails
pub fn mod1fn() {
println!("1");
mod2::mod2fn();
}
mod2.rs:
pub fn mod2fn() {
println!("2");
}
建筑的结果是:
错误:无法在此位置声明新模块
-->src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
|
注意:可以通过'src/mod.rs将此模块'src'移动到它自己的目录`
-->src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
注:。。。或者“使用”模块“mod2”,而不是重新定义它
-->src\mod1.rs:1:5
|
1 | mod mod2;
| ^^^^
我不能
使用它,因为它在任何地方都不作为模块存在,我不想修改目录结构。所有顶级模块声明都应该放在main.rs
中,如下所示:
mod mod1;
mod mod2;
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}
然后,您可以在mod1
内部使用板条箱::mod2
:
use crate::mod2;
pub fn mod1fn() {
println!("1");
mod2::mod2fn();
}
如果你还没有读过,我建议你读一读——它们可能会让语言新手感到有点困惑。如果你不希望你的mod
语句都在你的主文件中(例如:在main.rs
中,你不会在某个模块中使用一些公共成员,在本例中是mod2
)您可以执行以下操作:
按以下方式构造您的src
:
main.rs
my_module:
mod.rs
mod1.rs
mod2.rs
然后您可以只修改我的模块
和使用我的模块::mod1
,如下所示:
mod mod1;
mod mod2;
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}
main.rs:
mod mod1; // Works
fn main() {
println!("Hello, world!");
mod1::mod1fn();
}
mod my_模块;
使用my_模块::mod1;
fn main(){
println!(“你好,世界!”);
mod1::mod1fn();
}
my_模块/模块rs
pub mod mod1;
pub mod mod2;
my_模块/mod1.rs
使用super::mod2;
发布fn mod1fn(){
println!(“1”);
mod2::mod2fn();
}
非常感谢您!我几乎可以肯定没有这样的选择。我读了那一章,但不明白我能做你所描述的。@Neo:没问题!我发现,一旦你对模块系统有了感觉,它就有了意义,但肯定有一点学习曲线-。@Neo:我还推荐这篇关于如何对模块系统进行心理建模的博文: