我想把我的代码拆分成多个src子目录。例如:
src
main.rs
sorting_algorithms
bubble.rs
bubble.rs包含一个名为bubble_sort
的函数; 我该如何将其导入到main.rs中?
子文件夹必须声明为模块。您可以使用以下三种不同的方式进行声明:
内联方式:在main.rs
中声明sorting_algorithms
模块:
// In main.rs:
mod sorting_algorithms {
pub mod bubble;
}
在我看来,这是最简单的方法。
将一个名为sorting_algorithms.rs
的文件放入src
文件夹中,并加上模块声明:
// In sorting_algorithms.rs:
pub mod bubble;
将具有上述内容的mod.rs
文件放入子文件夹中。不建议这样做,因为同时使用多个mod.rs
文件可能会令人困惑。
src
main.rs
sorting_algorithms
bubble.rs
mod.rs
mod.rs文件可以将该文件夹的子模块暴露出来:
pub mod bubble;
bubble_sort
被声明为公共函数(pub fn bubble_sort(...)
),您可以从main.rs中使用它:mod sorting_algorithms;
pub use sorting_algorithms::bubble::bubble_sort;
Rust中的模块可以帮助您以清晰和逻辑的方式组织代码。
假设您在项目中有以下文件结构:
.
├── Cargo.toml
└── src
├── main.rs
├── subfolder1
│ ├── file1.rs
│ ├── file2.rs
│ └── subsubfolder
│ └── file1.rs
└── subfolder2
└── file1.rs
并且你想在主文件 main.rs
中使用子文件夹内定义的函数。
为了实现这一点,你可以通过使用带有花括号的 mod
关键字,在 main.rs
文件中直接声明子文件夹作为模块,并列出子模块:
// This is src/main.rs
mod subfolder1 {
pub mod subsubfolder {
pub mod file1;
}
pub mod file1;
pub mod file2;
}
mod subfolder2 {
pub mod file1;
}
use
关键字和从根目录开始的完整模块路径。// This can be any file
use crate::subfolder1::file1::fn1;
use crate::subfolder1::file2::fn2;
use crate::subfolder1::subsubfolder::file1::nestedfn;
use crate::subfolder2::file1::otherfn;
这种方法有一些优点:
mod.rs
的文件。可能的缺点:
pub mod
关键字和花括号,这可能会使其难以阅读和编辑。subfolder.rs
),或在子文件夹中创建一个mod.rs
文件。
sorting_algorithms::bubble::sort
,或者将其导入作用域:use sorting_algorithms::bubble::sort;
然后直接使用sort
。 - Boiethiosmod.rs
已被弃用吗?它会在某些版本中停止工作,还是因为某种原因被认为是不良实践? - ikamen__init__.py
。 - ikamen