我正在尝试将一个文件中的功能与其他多个文件一起使用。
当我尝试向文件中添加'mod somefile'时,Rust编译器希望将它们嵌套在一个子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件。 / p>
// src/main.rs
mod aaa;
mod bbb;
fn main() {
aaa::do_something();
bbb::do_something_else();
}
// 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
}
我希望能够将src/zzz.rs
留在根src
文件夹中,并在项目中的其他任何文件中使用其功能,而不必在每个文件的子文件夹中复制它(例如:src/aaa/zzz.rs
,src/bbb/zzz.rs
)。
答案 0 :(得分:4)
您只需在mod zzz;
中一次main.rs
。
在aaa.rs
和bbb.rs
中,您需要use crate::zzz;
,而不是mod zzz;
。
一个例子:
文件src/aaa.rs
:
use crate::zzz; // `crate::` is required since 2018 edition
pub fn do_something() {
zzz::do_stuff();
}
文件src/bbb.rs
:
use crate::zzz;
pub fn do_something_else() {
zzz::do_stuff();
}
文件src/main.rs
:
// src/main.rs
mod aaa;
mod bbb;
mod zzz;
fn main() {
aaa::do_something();
bbb::do_something_else();
}
文件src/zzz.rs
:
pub fn do_stuff() {
println!("does stuff zzz");
}
仅当您有一个名为mod zzz;
的目录并且其中包含文件aaa
和aaa
时,才需要在mod.rs
模块内使用zzz.rs
。然后,您必须将mod zzz;
放在mod.rs
中,以使子模块aaa::zzz
对您的程序其余部分可见。