zoukankan      html  css  js  c++  java
  • Rust-使用包、Crate和模块管理不断增长的项目

      当我们编写大型程序时,组织代码显得很重要,因为你想在脑海中通晓整个程序,那几乎是不可能完成的。通过对相关功能分组和划分不同功能的代码,你可以清楚在哪里可以找到实现了特定功能的代码,以及在哪里可以改变一个功能的工作方式。

      到目前为止,我们编写的程序都在一个文件的一个模块中。伴随着项目的增长,你可以通过将代码分解为多个模块和多个文件来组织代码。一个包可以包含多个二进制crate项和一个可选的crate库。伴随着包的增长,你可以将包中的部分代码提取出来,做成独立的crate,这些crate则作为外部依赖项。对于一个由一系列相互关联的包组合而成的超大型项目,Cargo提供了“工作空间”这一功能。

      除了对功能进行分组以外,封装实现细节可以使你更高级地重用代码:你实现了一个操作后,其他的代码可以通过该代码的公共接口来进行调用,而不需要知道它是如何实现的。你在编写代码时可以定义哪些部分是其它代码可以使用的公共部分,以及哪些部分是你有权更改实现细节的私有部分。这是另一种减少你在脑海中记住项目内容数量的方法。

      这里有一个需要说明的概念“作用域(scope)”:代码所在的嵌套上下文有一组定义为"in scope"的名称。当阅读、编写和编译代码时,程序员和编译器需要知道特定位置的特定名称是否引用了变量、函数、结构体、枚举、模块、常量或者其它有意义的项。你可以创建作用域,以及改变哪些名称在作用域内还是作用域外。同一个作用域内不能拥有两个相同名称的项;可以使用一些工具来解决名称冲突。

      Rust有许多功能可以让你管理代码的组织,包括哪些内容可以被公开,哪些内容作为私有部分,以及程序每个作用域中的名字。这些功能。这有时被称为“模块系统(the module system)”,包括:

    • 包(Packages):Cargo的一个功能,它允许你构建、测试和分享crate。
    • Crate:一个模块的树形结构,它形成了库或二进制项目。
    • 模块(Modules)和use:允许你控制作用域和路径的私有性。
    • 路径(path):一个命名例如结构体、函数或模块等项的方式。
  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14461093.html
Copyright © 2011-2022 走看看