如何解决如何从 Rust 中的子文件夹导入函数
我在 src 文件夹中有主要的 main.rs。 main.rs 包含以下内容。
#[allow(dead_code)]
fn main() {
println!("Hello,world!");
hallo();
}
src/lib 文件夹中的 main.rs 当前没有任何内容。
我现在如何使用 src 文件夹中 main.rs 中 test.rs 的函数“hello”? test.rs 包含以下内容。
fn hallo(){
println!("hallo");
}
我的文件夹结构是这样的。
| Cargo.lock
| Cargo.toml
|
+---src
| | main.rs
| |
| \---lib
| main.rs
| test.rs
```
解决方法
这进入了 Rust 模块系统。我会尽力解释它,但本书做得更好,所以如果你感到困惑,请继续查看here。基本上,Rust 中的每个文件(除了 main.rs 或 lib.rs)对应一个 crate 中的一个模块(main.rs 和 lib.rs 是 crate 的根)。该文件中的所有内容都在该模块下公开。要创建模块,请将此行添加到其父模块(或 lib.rs 或 main.rs,使其成为板条箱下的子模块):
mod somemod;
那么,你有两个选择:
- 在放置
somemod.rs
声明的文件所在的文件夹中添加一个名为mod somemod;
的文件。您的文件结构如下所示:
|
+---main.rs
+---somemod.rs
- 在带有
somemod
声明的文件所在的文件夹中添加一个名为mod somemod;
的文件夹。如果您希望somemod
拥有子模块,将使用它;您将使用与创建顶级模块相同的两个选项来创建子模块。您的文件结构如下所示:
|
+---main.rs
+---somemod
|
+---mod.rs
然后,在该行之后(以及之前,如果您确实需要的话),您就可以使用 somemod
命名空间来引用 {{1 }} 模块:
somemod
您还可以使用 mod somemod;
// later on ...
somemod::foo();
关键字将 use
的成员引入当前命名空间:
somemod
因此,就您而言,您的代码如下所示:
main.rs:
mod somemod;
use somemod::foo;
// later on ...
foo();
test.rs:
mod test;
use test::hallo;
#[allow(dead_code)]
fn main() {
println!("Hello,world!");
hallo();
}
请注意,为了能够从模块外部引用 pub fn hallo() {
println!("hallo");
}
,我们必须在 hallo
的 from 中添加 pub
关键字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。