如何从 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 中的函数“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,这使其成为 crate 下的子模块):
mod somemod;
那么,你有两个选择:
- 在放置
mod somemod;
声明的文件所在的文件夹中添加一个名为 somemod.rs
的文件。您的文件结构如下所示:
|
+---main.rs
+---somemod.rs
- 在带有
mod somemod;
声明的文件所在的文件夹中添加一个名为 somemod
的文件夹。如果您希望 somemod
有子模块,可以使用它;您将使用与创建顶级模块相同的两个选项来创建子模块。您的文件结构如下所示:
|
+---main.rs
+---somemod
|
+---mod.rs
然后,在那行之后(以及之前,如果你真的想要的话),你可以使用 somemod
命名空间 来引用任何 public 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();
}
test.rs:
pub fn hallo() {
println!("hallo");
}
请注意,为了能够从模块外部引用 hallo
,我们必须在 fn hallo
.
的 from 中添加 pub
关键字
我在 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,这使其成为 crate 下的子模块):
mod somemod;
那么,你有两个选择:
- 在放置
mod somemod;
声明的文件所在的文件夹中添加一个名为somemod.rs
的文件。您的文件结构如下所示:
|
+---main.rs
+---somemod.rs
- 在带有
mod somemod;
声明的文件所在的文件夹中添加一个名为somemod
的文件夹。如果您希望somemod
有子模块,可以使用它;您将使用与创建顶级模块相同的两个选项来创建子模块。您的文件结构如下所示:
|
+---main.rs
+---somemod
|
+---mod.rs
然后,在那行之后(以及之前,如果你真的想要的话),你可以使用 somemod
命名空间 来引用任何 public 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();
}
test.rs:
pub fn hallo() {
println!("hallo");
}
请注意,为了能够从模块外部引用 hallo
,我们必须在 fn hallo
.
pub
关键字