我希望有一个包含多个结构的模块,每个模块都在自己的文件中.以Math模块为例:
Math/
Vector.rs
Matrix.rs
Complex.rs
Run Code Online (Sandbox Code Playgroud)
我希望每个结构都在同一个模块中,我将从我的主文件中使用它,如下所示:
use Math::Vector;
fn main() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然而,Rust的模块系统(开始时有点混乱)并没有提供一种明显的方法来实现这一点.它似乎只允许您将整个模块放在一个文件中.这不是质朴的吗?如果没有,我该怎么做?
我是 Rust 新手,我在开源存储库中遇到了这种函数声明 pub(crate) fn
我以前从未见过这种语法,所以我想知道它是用来做什么的?
要使子模块中的方法公开,您必须显式地重新导出它们,否则使子模块本身公开:
mod foo {
mod bar {
pub fn baz() {}
}
pub use self::bar::baz;
}
Run Code Online (Sandbox Code Playgroud)
这似乎暗示pub用于指示某件事应该仅对模块公开(因为您可以选择不这样做)
但是,如果您使用在外部上下文中定义的私有类型,那么当您尝试在内部上下文中将涉及该类型的公共函数设为公共时,即使它没有重新导出,也会出现错误。
mod foo {
struct Foo;
mod bar {
use super::Foo;
pub fn baz(foo: Foo) {}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是
mod foo {
mod bar {
pub fn baz() {}
}
pub use self::bar::baz;
}
Run Code Online (Sandbox Code Playgroud)
使用pub关键字的惯用方法是什么?它应该保留给实际上公共的东西还是可以用于内部模块?