Rust modules: Difference between revisions
From wikinotes
No edit summary |
|||
Line 10: | Line 10: | ||
|} | |} | ||
</blockquote><!-- Documentation --> | </blockquote><!-- Documentation --> | ||
= Scrap = | |||
<blockquote> | |||
Let's just understand this all first | |||
== sample-1 == | |||
<blockquote> | |||
<syntaxhighlight lang="bash"> | |||
src/ | |||
main.rs | |||
house.rs | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="rust"> | |||
// main.rs | |||
mod house; | |||
fn main() { | |||
println!("{}", house::house_name()); | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="rust"> | |||
// house.rs | |||
pub fn house_name() -> String { | |||
String:from("hi") | |||
} | |||
</syntaxhighlight> | |||
</blockquote><!-- sample-1 --> | |||
</blockquote><!-- Scrap --> | |||
= Entrypoint = | = Entrypoint = |
Revision as of 03:15, 8 February 2023
Modules are rust libraries.
The std::prelude
module is included in the scope of every program.
Documentation
cargo book: package layout https://doc.rust-lang.org/cargo/guide/project-layout.html
Scrap
Let's just understand this all first
sample-1
src/ main.rs house.rs// main.rs mod house; fn main() { println!("{}", house::house_name()); }// house.rs pub fn house_name() -> String { String:from("hi") }
Entrypoint
For modules to be compiled, they must be used (however indirectly)
from either your crate'smain.rs
orlib.rs
.
Naming/Paths
Module names govern where they can be found within the filesystem.
Module locations are based on where they are defined# from the rust book: backyard ├── Cargo.lock ├── Cargo.toml └── src ├── garden │ └── vegetables.rs ├── garden.rs └── main.rsThe module
foo
's code could be
src/foo.rs
src/foo/mod.rs
Imports
use
merge namespace into current (ex.use foo; myfn();
)mod
enables you to access from namespace (ex.mod foo; foo::myfn();
)
use
(merge with current namespace)use std::io; // merges objects from namespace into your own use std::io::*; // use std::fs::File; // import 'File' only into current namespace use std::fs::{File, DirBuilder}; // import multiple types/functions into current namespace std::io::stdin() // you also can access objects directly from their namespace without `use`
mod
(access namespace)
Access Control
By default, a module's code is public to itself and it's children,
but private to it's parents and/or callers.pub mod house { pub mod livingroom { // ... } mod bedroom { // ... } }