pub(restricted)
。此功能允许您指定一个项的“公共程度”。语法非常灵活(您可以使一个项对特定模块树可见,而不是整个crate),但如果您想保持简单,pub(crate)
将使项目在crate内任何地方都可以访问,但其他crate将无法访问(相当于C#中的internal
)。util
的模块中导出foo
(作为mycrate::util::foo
),而bar
是内部的,baz
是私有的。代码可能如下所示:pub mod util {
pub fn foo() {
unimplemented!()
}
pub(crate) fn bar() {
unimplemented!()
}
fn baz() {
unimplemented!()
}
}
pub use
)。以下是上面示例的样子:pub mod util {
pub use util_impl::foo;
}
mod util_impl {
pub fn foo() {
unimplemented!()
}
pub fn bar() {
unimplemented!()
}
fn baz() {
unimplemented!()
}
}
这不仅阅读和理解难度大,而且没有覆盖所有使用pub
的情况。例如,如何使导出结构体中的某些字段在同一箱中的其他模块中可访问而不必将它们也导出?唯一的选择是公开一个包装器,其具有一个私有字段,其类型为具有公共字段的结构体;如果您想要隐藏来自其他箱的所有字段,则可以正常工作,但是如果您想同时公开一些字段并使同一结构中的其他字段为内部,则无法做到。