RustPrograming_Cases/lib.rs
1pub use crate::front_of_house::hosting;
2use std::io;
3mod back_of_house;
4mod front_of_house;
5pub mod mod_intergration_test;
6//定义一个模块,以mod关键字开始,后跟模块名
7//这里定义一个名为【前台】的模块
8
9//main.rs和lib.rs是crate的根,
10//这是因为这两个文件的内容分别在crate模块结构的根组成了一个名为crate的模块,这被称为模块树
11//注意,整个模块都根植于名为crate的模块下
12
13//这里的模块树形结构为:
14// crate
15// └── front_of_house
16// ├── hosting
17// │ ├── add_to_waitlist
18// │ └── seat_at_table
19// └── serving
20// ├── take_order
21// ├── serve_order
22// └── take_payment
23
24
25//定义一个新函数:eat_at_restaurant
26pub fn eat_at_restaurant(){
27 println!("eat at restaurant!");
28 //使用两种路径的方式分别调用hosting::add_to_waitlist
29 //crate根定义了一个名为front_of_house的模块,front_of_house模块不是pub的,但是因为eat_at_restaurant和
30 //front_of_house定义在同一模块(兄弟)所以可以在eat_at_restaurant中引用front_of_house
31 //可以访问hosting的父模块(front_of_house),hosting模块也被标记为pub,所以也可以访问hosting
32 //add_to_waitlist函数同理
33 //绝对路径
34 // crate::front_of_house::hosting::add_to_waitlist();
35 //相对路径
36 // front_of_house::hosting::add_to_waitlist();
37
38 //***
39 //在rust中,默认的所有项(函数,方法,结构体,枚举等)对于父模块都是私有的
40 //父模块不能使用子模块中的私有项,但是子模块可以使用父模块中的项
41 //可以使用pub关键字来创建公共项,使子模块的部分项可以暴露给父模块
42 //因此使用pub关键字标记hosting模块和add_to_waitlist函数
43 //(单独标记hosting模块是不行,因为add_to_waitlist函数仍然是私有的)
44 //***
45
46 //在使用use创建段路径后,可以直接调用add_to_waitlist
47 hosting::add_to_waitlist();
48
49 //在夏天订购一个黑麦土司作为早餐
50 let mut meal = back_of_house::Breakfast::summer("Rye");
51 //改变主意更换面包类型
52 meal.toast = String::from("wheat");
53 println!("meal is :{}",meal.to_string());
54 println!("-----------------------");
55 println!("i'd like {} toast please",meal.toast);
56
57 //使用枚举
58 let soup:back_of_house::Appetizer = back_of_house::Appetizer::Soup;
59 let salad:back_of_house::Appetizer = back_of_house::Appetizer::Salad;
60
61}
62
63fn deliver_order(){
64 println!("deliver order!");
65}