• study Rust-9【组织管理】


    Rust中三个组织管理的概念:箱(Crate)、包(Package)、模块(module)

    Crate:

    "箱"是二进制程序文件或者库文件,存在于"包"中。

    "箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。

    Package:

    当我们使用 Cargo 执行 new 命令创建 Rust 工程时,工程目录下会建立一个 Cargo.toml 文件。工程的实质就是一个包,包必须由一个 Cargo.toml 文件来管理,该文件描述了包的基本信息以及依赖项。

    一个包最多包含一个库"箱",可以包含任意数量的二进制"箱",但是至少包含一个"箱"(不管是库还是二进制"箱")。

    当使用 cargo new 命令创建完包之后,src 目录下会生成一个 main.rs 源文件,Cargo 默认这个文件为二进制箱的根,编译之后的二进制箱将与包名相同。

    Module:

    对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。Java 组织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是 function。

    这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。Rust 中的组织单位是模块(Module)

    万恶的资本主义制度如下:

    mod nation {
       mod government {
          fn govern() {}
       }
       mod congress{
          fn legislate(){}
       }
       mod court{
          fn judicial(){}
       }
    }

    描述路径方法如下:

    nation::government::gocern

    访问权限

    Rust 中有两种简单的访问权:公共(public)和私有(private)。

    默认情况下,如果不加修饰符,模块中的成员访问权将是私有的。

    如果想使用公共权限,需要使用 pub 关键字。

    对于私有的模块,只有在与其平级的位置或下级的位置才能访问,不能从其外部访问。

    对于结构体访问的权限:结构体除了其本身是私有的以外,其字段也默认是私有的。所以如果想使用模块中的结构体以及其字段,需要 pub 声明

    mod nation {
        pub mod government {
            pub fn govern() {}
        }
    
        mod congress {
            pub fn legislate() {}
        }
       
        mod court {
            fn judicial() {
                super::congress::legislate();
            }
        }
    }
    
    fn main() {
        nation::government::govern();
    }
    mod back_of_house {
        pub struct Breakfast {
            pub toast: String,
            seasonal_fruit: String,
        }
    
        impl Breakfast {
            pub fn summer(toast: &str) -> Breakfast {
                Breakfast {
                    toast: String::from(toast),
                    seasonal_fruit: String::from("peaches"),
                }
            }
        }
    }
    pub fn eat_at_restaurant() {
        let mut meal = back_of_house::Breakfast::summer("Rye");
        meal.toast = String::from("Wheat");
        println!("I'd like {} toast please", meal.toast);
    }
    fn main() {
        eat_at_restaurant()
    }

    use 关键字

    use 关键字把 govern 标识符导入到了当前的模块下,可以直接使用。

    这样就解决了局部模块路径过长的问题。

    当然,有些情况下存在两个相同的名称,且同样需要导入,我们可以使用 as 关键字为标识符添加别名

    mod nation {
        pub mod government {
            pub fn govern() {}
        }
    }
    
    use crate::nation::government::govern;
    
    fn main() {
        govern();
    }
    mod nation {
        pub mod government {
            pub fn govern() {}
        }
        pub fn govern() {}
    }
       
    use crate::nation::government::govern;
    use crate::nation::govern as nation_govern;
    
    fn main() {
        nation_govern();
        govern();
    }

    use和pub一起使用:

    mod nation {
        pub mod government {
            pub fn govern() {}
        }
        pub use government::govern;
    }
    
    fn main() {
        nation::govern();
    }
  • 相关阅读:
    [九、完整项目]3完成首页顶部内容的制作
    [九、完整项目]10完成课程列表视图的制作
    [九、完整项目]7将四个功能模块合并成首页
    [九、完整项目]4完成首页课程类别列表的制作
    [九、完整项目]8完成课程类型和课程列表类型的定义
    [九、完整项目]2集中存放应用程序所有视图通用的修饰符
    [九、完整项目]6完成首页热门主题列表的制作
    [九、完整项目]9完成历史课程列表的制作
    [九、完整项目]1使用Swift UI技术搭建教程合集的界面
    [九、完整项目]5完成首页课程班级列表的制作
  • 原文地址:https://www.cnblogs.com/usegear/p/15005277.html
Copyright © 2020-2023  润新知