Rust 如何在多个文件中使用一个文件中的函数?
我正在尝试将一个文件中的函数与多个其他文件一起使用 当我尝试将“mod somefile”添加到文件中时,Rust编译器希望它们嵌套在子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件Rust 如何在多个文件中使用一个文件中的函数?,rust,Rust,我正在尝试将一个文件中的函数与多个其他文件一起使用 当我尝试将“mod somefile”添加到文件中时,Rust编译器希望它们嵌套在子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件 // src/main.rs mod aaa; mod bbb; fn main() { aaa::do_something(); bbb::do_something_else(); } 我希望能够将src/zzz.rs保留在根src文件夹中,并在项目中的任何其他文件中使用其
// src/main.rs
mod aaa;
mod bbb;
fn main() {
aaa::do_something();
bbb::do_something_else();
}
我希望能够将src/zzz.rs保留在根src文件夹中,并在项目中的任何其他文件中使用其功能,而不必将其复制到每个文件的子文件夹中,例如:src/aaa/zzz.rs、src/bbb/zzz.rs。您需要mod zzz;只有一次在大城市
在aaa.rs和bbb.rs中,您需要一个使用板条箱::zzz;,不是mod zzz
例如:
文件src/aaa.rs:
文件src/bbb.rs:
文件src/main.rs:
文件src/zzz.rs:
你需要一个mod zzz;只有当您有一个名为aaa的目录,并且其中有一个文件mod.rs和zzz.rs时,才在aaa模块内部。然后你必须把mod zzz;在mod.rs中,使子模块aaa::zzz对程序的其余部分可见。您需要mod zzz;只有一次在大城市
在aaa.rs和bbb.rs中,您需要一个使用板条箱::zzz;,不是mod zzz
例如:
文件src/aaa.rs:
文件src/bbb.rs:
文件src/main.rs:
文件src/zzz.rs:
你需要一个mod zzz;只有当您有一个名为aaa的目录,并且其中有一个文件mod.rs和zzz.rs时,才在aaa模块内部。然后你必须把mod zzz;在mod.rs中,使子模块aaa::zzz对程序的其余部分可见。有两个不同的思想流派在竞争。在文件系统层次结构中锁定模块层次结构并没有问题,他们甚至认为这是一个好主意。另一个学派对此深恶痛绝。爪哇和铁锈继承了以前的学校。因此,在您的情况下,您必须从要在多个其他板条箱中重复使用的代码中构建一个板条箱。@BitTickler Java的包和Rust的模块的可能重复是非常不同的。除非将它们与Python的模块或bash的源文件等更为不同的东西进行比较,否则Java的包和Rust的模块看起来更像是截然相反的东西。Java的包是每个目录一个包,包不嵌套,每个文件只属于一个包等。在Rust中,模块嵌套,每个文件可以有多个模块,所以我不明白为什么它们应该属于同一个学派?@Andreytukin,从文件位置的意义上说,它们是。你可能会猜测——这是理所当然的,我不是一个真正的粉丝。有两个不同的思想流派在竞争。在文件系统层次结构中锁定模块层次结构并没有问题,他们甚至认为这是一个好主意。另一个学派对此深恶痛绝。爪哇和铁锈继承了以前的学校。因此,在您的情况下,您必须从要在多个其他板条箱中重复使用的代码中构建一个板条箱。@BitTickler Java的包和Rust的模块的可能重复是非常不同的。除非将它们与Python的模块或bash的源文件等更为不同的东西进行比较,否则Java的包和Rust的模块看起来更像是截然相反的东西。Java的包是每个目录一个包,包不嵌套,每个文件只属于一个包等。在Rust中,模块嵌套,每个文件可以有多个模块,所以我不明白为什么它们应该属于同一个学派?@Andreytukin,从文件位置的意义上说,它们是。你可能会猜到——这是理所当然的,我不是一个真正的粉丝。
// src/aaa.rs
mod zzz; // rust compiler wants the file to be nested in a subfolder as aaa/zzz.rs
pub fn do_something() {
zzz::do_stuff();
}
// src/bbb.rs
mod zzz; // again, compiler wants the file nested in a subfolder as bbb/zzz.rs
pub fn do_something_else() {
zzz::do_stuff();
}
// src/zzz.rs
pub fn do_stuff() {
// does stuff here
}
use crate::zzz; // `crate::` is required since 2018 edition
pub fn do_something() {
zzz::do_stuff();
}
use crate::zzz;
pub fn do_something_else() {
zzz::do_stuff();
}
// src/main.rs
mod aaa;
mod bbb;
mod zzz;
fn main() {
aaa::do_something();
bbb::do_something_else();
}
pub fn do_stuff() {
println!("does stuff zzz");
}