System modułów w Rust opiera się na słowie kluczowym mod. Moduły pozwalają logicznie dzielić kod na pliki i przestrzenie nazw. Kluczowe kwestie:
pub sprawia, że element jest publiczny dla całego drzewa modułów.pub(crate) — dostępny w całym crate (tj. bibliotece/projekcie).use mod_name::item) i aliasy.W przypadku dużych projektów zaleca się używanie drzewa modułów z opisem publicznych interfejsów tylko przez lib.rs lub main.rs, reszta jest prywatna:
mod network; mod storage; pub use network::api;
Jeśli struktura jest zadeklarowana jako pub, czy będzie dostępna dla innych crate?
Odpowiedź: Nie, nie wystarczy po prostu oznaczyć struct jako pub. Musi być również zadeklarowana w module otwartym dla zewnętrznych crate (pub mod), a pola struktury muszą być publiczne, aby uzyskać do nich bezpośredni dostęp.
Przykład:
mod foo { pub struct Bar; } // Bar nie jest widoczny poza crate, ponieważ foo jest prywatny
Historia
Historia
Historia
Wielu nowicjuszy tworzy strukturę pub, ale pozostawia pola prywatne, co uniemożliwia ich inicjalizację poza modułem. W rezultacie funkcja z innego modułu nie mogła bezpośrednio utworzyć struktury, co powodowało błędy, dopóki nie uczynili pól lub konstruktorów publicznymi.