Константы PEAR/APPLE/CUCUMBER/CARROT
помечены как pub
, что означает, что к ним можно получить доступ из любой точки мира, даже если они находятся в частном модуле.
Это обычная техника для реализации чего-либо в закрытый модуль и реэкспорт только того, что нам нужно, например,
// actual implementation is here
mod foo_internal;
pub use foo_internal::{Foo, Bar};
Это все еще сохраняет конфиденциальность / видимость, поскольку Foo
и Bar
не могут быть реэкспортированы, если они private.
Вы также можете создать новую иерархию модулей для пользователей вашей библиотеки:
mod foo_internal;
pub mod foo {
pub use foo_internal::Foo;
}
pub mod bar {
pub use foo_internal::Bar;
}
Это явно отделяет интерфейс publi c от детали реализации , поэтому реализация может быть свободно реорганизована без изменения модулей publi c.