mirror of
https://github.com/sunface/rust-by-practice.git
synced 2025-06-23 12:39:42 +00:00
Add [Modules]
This commit is contained in:
148
solutions/crate-module/module.md
Normal file
148
solutions/crate-module/module.md
Normal file
@ -0,0 +1,148 @@
|
||||
1.
|
||||
```rust
|
||||
// in lib.rs
|
||||
mod front_of_house {
|
||||
mod hosting {
|
||||
fn add_to_waitlist() {}
|
||||
|
||||
fn seat_at_table() {}
|
||||
}
|
||||
|
||||
mod serving {
|
||||
fn take_order() {}
|
||||
|
||||
fn serve_order() {}
|
||||
|
||||
fn take_payment() {}
|
||||
|
||||
fn complain() {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
2.
|
||||
```rust
|
||||
// in lib.rs
|
||||
pub mod front_of_house {
|
||||
pub mod hosting {
|
||||
pub fn add_to_waitlist() {}
|
||||
|
||||
pub fn seat_at_table() {}
|
||||
}
|
||||
|
||||
pub mod serving {
|
||||
pub fn take_order() {}
|
||||
|
||||
pub fn serve_order() {}
|
||||
|
||||
pub fn take_payment() {}
|
||||
|
||||
// Maybe you don't want the guest hearing the your complaining about them
|
||||
// So just make it private
|
||||
fn complain() {}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn eat_at_restaurant() {
|
||||
// 绝对路径
|
||||
crate::front_of_house::hosting::add_to_waitlist();
|
||||
|
||||
// 相对路径
|
||||
front_of_house::hosting::add_to_waitlist();
|
||||
}
|
||||
```
|
||||
|
||||
3.
|
||||
```rust
|
||||
mod back_of_house {
|
||||
fn fix_incorrect_order() {
|
||||
cook_order();
|
||||
super::front_of_house::serving::serve_order();
|
||||
}
|
||||
|
||||
fn cook_order() {}
|
||||
}
|
||||
```
|
||||
|
||||
```rust
|
||||
mod back_of_house {
|
||||
fn fix_incorrect_order() {
|
||||
cook_order();
|
||||
crate::front_of_house::serving::serve_order();
|
||||
}
|
||||
|
||||
fn cook_order() {}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
4.
|
||||
```rust
|
||||
// in src/lib.rs
|
||||
|
||||
mod front_of_house;
|
||||
mod back_of_house;
|
||||
pub fn eat_at_restaurant() -> String {
|
||||
front_of_house::hosting::add_to_waitlist();
|
||||
|
||||
back_of_house::cook_order();
|
||||
|
||||
String::from("yummy yummy!")
|
||||
}
|
||||
```
|
||||
|
||||
```rust
|
||||
// in src/back_of_house.rs
|
||||
|
||||
use crate::front_of_house;
|
||||
pub fn fix_incorrect_order() {
|
||||
cook_order();
|
||||
front_of_house::serving::serve_order();
|
||||
}
|
||||
|
||||
pub fn cook_order() {}
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
// in src/front_of_house/mod.rs
|
||||
|
||||
pub mod hosting;
|
||||
pub mod serving;
|
||||
```
|
||||
|
||||
```rust
|
||||
// in src/front_of_house/hosting.rs
|
||||
|
||||
pub fn add_to_waitlist() {}
|
||||
|
||||
pub fn seat_at_table() -> String {
|
||||
String::from("sit down please")
|
||||
}
|
||||
```
|
||||
|
||||
```rust,editable
|
||||
// in src/front_of_house/serving.rs
|
||||
|
||||
pub fn take_order() {}
|
||||
|
||||
pub fn serve_order() {}
|
||||
|
||||
pub fn take_payment() {}
|
||||
|
||||
// Maybe you don't want the guest hearing the your complaining about them
|
||||
// So just make it private
|
||||
fn complain() {}
|
||||
```
|
||||
|
||||
|
||||
5.
|
||||
```rust
|
||||
mod front_of_house;
|
||||
|
||||
fn main() {
|
||||
assert_eq!(front_of_house::hosting::seat_at_table(), "sit down please");
|
||||
assert_eq!(hello_package::eat_at_restaurant(),"yummy yummy!");
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user