【Rust练习】27.Module
练习题来自:https://practice-zh.course.rs/crate-module/module.html
建议在命令行下操作完成本节内容,Windows 11/10 首选 Windows 终端,好看,支持渲染中文字体,缺点是功能太少了;其次推荐 mobaxterm,除了难看没别的缺点,功能强大。
1
🌟🌟 根据以下的模块树描述实现模块 front_of_house :
库包的根(src/lib.rs)
└── front_of_house
├── hosting
│ ├── add_to_waitlist
│ └── seat_at_table
└── serving
├── take_order
├── serve_order
├── take_payment
└── complain
和课程里写的那个差不多:
// 填空
// 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
🌟🌟 让我们在库包的根中定义一个函数 eat_at_restaurant, 然后在该函数中调用之前创建的函数 eat_at_restaurant
代码如下:
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
fn seat_at_table() {}
}
mod serving {
fn take_order() {}
fn serve_order() {}
fn take_payment() {}
fn complain() {}
}
}
pub fn eat_at_restaurant() {
// 使用绝对路径调用
crate::front_of_house::hosting::add_to_waitlist();
// 使用相对路径调用
front_of_house::hosting::add_to_waitlist();
}
3
🌟🌟 我们还可以使用 super 来导入父模块中的项
说实话这里用绝对和相对的区别不是很大。。。
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
fn seat_at_table() {}
}
pub mod serving {
fn take_order() {}
pub fn serve_order() {}
fn take_payment() {}
fn complain() {}
}
}
mod back_of_house {
fn fix_incorrect_order() {
cook_order();
// 使用三种方式填空
//1. 使用关键字 `super`
//2. 使用绝对路径
super::front_of_house::serving::serve_order();
crate::front_of_house::serving::serve_order();
}
fn cook_order() {}
}
4
back_of_house.rs
use super::front_of_house::serving::serving;
pub mod back_of_house {
use super::serving;
pub fn fix_incorrect_order() {
cook_order();
serving::serve_order();
}
pub fn cook_order() {}
}
front_of_house
hosting.rs
pub mod hosting {
pub fn add_to_waitlist() {}
pub fn seat_at_table() -> String {
String::from("sit down please")
}
}
serving.rs
pub mod serving {
pub fn take_order() {}
pub fn serve_order() {}
pub fn take_payment() {}
// 我猜你不希望顾客听到你在抱怨他们,因此让这个函数私有化吧
fn complain() {}
}
mod.rs
pub mod hosting;
pub mod serving;
lib.rs
mod front_of_house;
mod back_of_house;
pub use crate::front_of_house::hosting::hosting;
pub fn eat_at_restaurant() -> String {
hosting::add_to_waitlist();
back_of_house::back_of_house::cook_order();
String::from("yummy yummy!")
}
5
现在我们可以从二进制包中发起函数调用了.
use hello_package::{eat_at_restaurant, hosting::seat_at_table};
fn main() {
assert_eq!(seat_at_table(), "sit down please");
assert_eq!(eat_at_restaurant(),"yummy yummy!");
}
还有一件事,如果你使用VS Code的Rust-Analysis插件,不知道如何导入包,直接敲函数即可,插件会自动修改文件最上方导入的代码。
原文地址:https://blog.csdn.net/qq_37387199/article/details/144942270
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!