【发布时间】:2019-02-10 21:43:54
【问题描述】:
我正在尝试将一个文件中的函数与多个其他文件一起使用。
当我尝试向文件添加“mod somefile”时,Rust 编译器希望它们嵌套在子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都复制文件。
// 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 文件夹中,并在项目中的任何其他文件中使用其功能,而不必在每个文件的子文件夹中复制它(例如:@ 987654328@, src/bbb/zzz.rs)。
【问题讨论】:
-
有 2 种不同的思想流派相互竞争。人们没有看到将模块层次结构锁定在文件系统层次结构上的问题,他们甚至认为这是一个好主意。另一流派对此深恶痛绝。 Java(和 rust)遵循以前的学校。因此,在您的情况下,您必须从要在多个其他 crate 中重用的代码构建一个 crate。
-
@BitTickler Java 的包和 Rust 的模块非常不同。除非您将它们与更不同的东西(例如 Python 的模块或 bash 的源文件)进行比较,否则 Java 的包和 Rust 的模块似乎更像是完全相反的。 Java的包是每个目录一个包,包不嵌套,每个文件都属于一个包等。在Rust中,模块嵌套,每个文件可以有多个模块,所以我不明白为什么它们应该属于到同一个“思想流派”?
-
@AndreyTyukin 在文件位置很重要的意义上,它们是。您可能会猜到 - 理所当然地,我并不是真正的粉丝。
标签: rust