繁体   English   中英

如何从 Rust 中的子文件夹导入函数

[英]How do I import functions from subfolders in Rust

我在 src 文件夹中有主要的 main.rs。 main.rs 包含以下内容。

#[allow(dead_code)]
fn main() {
    println!("Hello, world!");
    hallo();
}

src/lib文件夹下的main.rs目前没有任何内容。

我现在如何使用 src 文件夹中 main.rs 中的 test.rs 中的 function “hello”? test.rs 包含以下内容。

fn hallo(){
    println!("hallo");
}

我的文件夹结构如下所示。

|   Cargo.lock
|   Cargo.toml
|           
+---src
|   |   main.rs
|   |   
|   \---lib
|           main.rs
|           test.rs
```

这进入 Rust 模块系统。 我会尽力解释它,但是这本书做得更好,所以如果您感到困惑,请先阅读 go 并在此处查看 基本上,Rust 中的每个文件(除了 main.rs 或 lib.rs)都对应于 crate 中的一个模块(main.rs 和 lib.rs 是 crate 的根)。 该文件中的所有内容都暴露在该模块下。 要创建一个模块,请将这一行添加到其父模块(或 lib.rs 或 main.rs,使其成为 crate 下的子模块):

mod somemod;

然后,您有两个选择:

  • 在与您放置该mod somemod;的文件相同的文件夹中添加一个名为somemod.rs的文件; 宣言。 您的文件结构如下所示:
|
+---main.rs
+---somemod.rs
  • 在与带有mod somemod;的文件相同的文件夹中添加一个名为somemod的文件夹; 宣言。 如果您希望somemod有子模块,则可以使用它; 您将使用与创建顶级模块相同的两个选项来创建子模块。 您的文件结构如下所示:
|
+---main.rs
+---somemod
    |
    +---mod.rs

然后,在那一行之后(以及之前,如果你真的想要的话),你就可以使用somemod命名空间来引用somemod模块的任何公共成员:

mod somemod;

// later on ...
somemod::foo();

您还可以使用use关键字将somemod的成员带入当前命名空间:

mod somemod;
use somemod::foo;

// later on ...
foo();

因此,在您的情况下,您的代码将如下所示:

main.rs:

mod test;
use test::hallo;

#[allow(dead_code)]
fn main() {
    println!("Hello, world!");
    hallo();
}

测试.rs:

pub fn hallo() {
    println!("hallo");
}

请注意,为了能够从模块外部引用hallo ,我们必须在fn hallo的 from 中添加pub关键字。

我正在学习rust-lang
这就是我对模块导入的理解。 让你的项目结构像,

---- src /
      |
      ---- main.rs
---- Cargo.lock
---- Cargo.toml

现在您创建了一个名为parent的文件夹以及main.rs ,例如,

---- src /
      |
      ---- main.rs
      ---- parent /
             |
             ---- child /
                    |
                    ---- my_file.rs
---- Cargo.lock
---- Cargo.toml

要从my_file.rs导入 function my_function

第 1 步:创建一个名为lib.rs的文件和main.rs
第 2 步:在parent文件夹和child文件夹中添加空的mod.rs
第 3 步:在lib.rs添加pub mod parent
第 4 步:在parentmod.rs中,添加pub mod child
第 5 步:在childmod.rs中,添加pub mod my_file
第 6 步:在main.rs中添加mod parent
第七步:最后通过parent::child::my_file::my_function()使用

最终的项目结构将是这样的,

---- src /
      |
      ---- main.rs                   // mod parent
      ---- lib.rs                    // pub mod parent
      ---- parent /
             |
             ---- mod.rs             // pub mod child
             ---- child /
                    |
                    ---- mod.rs      // pub mod my_file
                    ---- my_file.rs
---- Cargo.lock
---- Cargo.toml

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM