rust 如何从src的子文件夹中导入文件?

tez616oj  于 2023-06-30  发布在  其他
关注(0)|答案(3)|浏览(213)

我想把代码分割到src的多个子目录中。示例:

src
  main.rs
  sorting_algorithms
    bubble.rs

bubble.rs 包含函数bubble_sort;如何将其导入到main.rs?

jchrr9hc

jchrr9hc1#

子文件夹必须声明为模块。你可以用三种不同的方法来做到这一点:

  • 内联:在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文件可能会造成混乱。
cczfrluj

cczfrluj2#

Rust只会在你添加mod.rs文件的时候将src的子文件夹识别为模块。将其添加到sorting_algorithms文件夹:

src
  main.rs
  sorting_algorithms
    bubble.rs
    mod.rs

mod.rs文件可以公开此文件夹的子模块:

pub mod bubble;

假设函数bubble_sort被声明为public(pub fn bubble_sort(...)),您将能够从www.example.com使用它main.rs:

mod sorting_algorithms;
pub use sorting_algorithms::bubble::bubble_sort;
gk7wooem

gk7wooem3#

Rust中的模块可以帮助您以清晰和逻辑的方式构建代码。
让我们假设你的项目中有一个像这样的文件结构:

.
├── Cargo.toml
└── src
    ├── main.rs
    ├── subfolder1
    │   ├── file1.rs
    │   ├── file2.rs
    │   └── subsubfolder
    │       └── file1.rs
    └── subfolder2
        └── file1.rs

并且您希望使用main.rs文件的子文件夹中的文件中定义的函数。
要做到这一点,您可以直接在main.rs文件中使用带花括号的mod关键字将子文件夹声明为模块,并列出其中的子模块:

// 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;

这种方法有一些优点:

  • 它允许子文件夹。您可以按照自己的喜好组织代码。
  • 它简洁明了。您不需要创建任何额外的文件。
  • 它反映了文件结构。你可以很容易地看到你有哪些模块,并导航到它们。
  • 它与Rust约定一致。Rust参考建议不要在一个项目中有许多名为mod.rs的文件。

和可能的缺点:

  • 它会使您的main.rs文件过长且杂乱。如果你有很多子文件夹和文件,你的main.rs文件会有很多pub mod关键字和花括号,这会使它很难阅读和编辑。
  • 它需要经常更新main.rs。如果在子文件夹中添加新模块,则需要编辑main.rs文件并使用mod关键字声明,否则编译器将无法识别。这可能很繁琐,特别是当您有许多文件要管理时。

总之,这种方法是在Rust中使用模块而不创建任何额外文件的方法之一。它有一些优点和缺点,这取决于您的偏好和项目结构。您可以选择最适合您需要的一个,或者尝试其他方法,例如创建与模块同名的文件(subfolder.rs),或者在子文件夹中创建mod.rs文件。

相关问题