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}