为了使子模块的方法公开,您必须明确地重新导出它们,否则将子模块本身公开:
这似乎暗示了
导致
mod foo {
mod bar {
pub fn baz() {}
}
pub use self::bar::baz;
}
这似乎暗示了
pub
用于指示一个东西应该公开到一个模块,但是你可以选择不这样做。但是,如果你在内部上下文中使用了外部环境中定义的私有类型,并且尝试将涉及该类型的公共函数公开到内部上下文中时,即使它没有被重新导出,你也会收到错误提示。mod foo {
struct Foo;
mod bar {
use super::Foo;
pub fn baz(foo: Foo) {}
}
}
导致
error[E0446]: private type `Foo` in public interface
--> src/lib.rs:7:9
|
2 | struct Foo;
| - `Foo` declared as private
...
7 | pub fn baz(foo: Foo) {}
| ^^^^^^^^^^^^^^^^^^^^ can't leak private type
如何正确地使用 pub
关键字?它应该保留给真正的公共事物,还是可以用于内部模块?
pub(crate)
正是我正在寻找的。谢谢。 - dspyzpub use super::Foo;
来修复编译错误。 - Jmb