Documentation
//可以使用as关键字给引入的包取别名,避免同名冲突
//可以使用{}来包裹住同模块下的多单元包,避免多次use引入
use std::io::{self, Result as IoResult};
use std::fmt::Result;
//使用pub use来进行重导出名称,这样可以使外部也能访问到内部的私有模块
pub use crate::person::man;

//Rust有模块树的概念,如果想要让某个模块.rs文件生效,必须先在根的单元包内声明同名模块。同理子模块.rs文件也是,子模块需要在模块.rs中声明。多级模块以此类推,一层层向下声明。
//仅声明kid模块,其对应的内容代码在src/kid.rs文件里
mod kid;

mod person {
    //man模块与woman模块即便都是私有的也可以互相访问,因为它们都在同级节点中
    pub mod man {
        pub fn man() {
            //以下代码编译错误,因为父节点里woman模块里woman()是私有的
            //super::woman::woman();
        }
    }

    mod woman {
        fn woman() {
            super::man::man();//相对路径写法
            crate::person::man::man();//绝对路径写法
        }
    }
}