- Jedes Cargo Projekt ist automatisch ein
crate
struct MyStruct;
fn main() {
let a = crate::MyStruct;
}
- Applikationen, wenn nicht anders definiert, nutzen meist die Datei
main.rs
- Libraries, nutzen
lib.rs
- Crates können Applikationen oder Libraries für Funktionen, Datenstrukturen, Makros, ... sein
- Module bilden Namensräume die ganze oder nur Teile daraus über
use
importiert werden können
- Nur auf Datentypen, Funktionen und Module, die als
pub
deklariert sind, kann von außen zugegriffen werden
mod my_module {
pub struct MyPublicStruct { }
impl MyPublicStruct {
pub fn public_func(&self) { }
fn private_func() { }
}
struct MyPrivateStruct { }
impl MyPrivateStruct {
fn func(&self) { }
}
}
use my_module::{MyPublicStruct};
fn main() {
MyPublicStruct { }.public_func();
// alternativ, kann aber Probleme mit Traits machen
my_module::MyPublicStruct { }.public_func();
}
- Module können auch ohne weiteres in andere Dateien ausgelagert werden
- Hierfür muss nur der Modulname deklariert werden und der Kompiler bezieht die Datei mit ein
pub mod my_module;
use my_module::{MyPublicStruct};
fn main() {
MyPublicStruct { };
}
// my_module.rs oder my_module/mod.rs
pub struct MyPublicStruct { }