使用包、Crate 和模块管理Cairo项目
当你编写大型程序时,组织你的代码将变得越来越重要。 通过对相关的功能进行分组,并将具有不同功能的代码分开,你就可以清楚地知道在哪里可以找到实现某一特定的代码,以及到哪里去改变一个功能的工作方式。
到目前为止,我们所写的程序都是在一个文件中的一个模块中。 伴随着项目的增长,你应该通过将代码分解为多个模块和多个文件来组织代码。 伴随着包的增长,你可以将包中的部分代码提取出来,做成独立的 crate,这些 crate 则作为外部依赖项。 本章将会涵盖所有这些概念。
我们也会讨论封装来实现细节,这可以使你更高级地重用代码:你实现了一个操作后,其他的代码可以通过该代码的公共接口来进行调用,而不需要知道它是如何实现的。
这里有一个需要说明的概念 “作用域(scope)”:代码所在的嵌套上下文有一组定义为 “in scope” 的名称。当阅读、编写和编译代码时,程序员和编译器需要知道特定位置的特定名称是否引用了变量、函数、结构体、枚举、模块、常量或者其他有意义的项。你可以创建作用域,以及改变哪些名称在作用域内还是作用域外。同一个作用域内不能拥有两个相同名称的项。
Cairo有许多功能可以让你管理代码的组织。这些功能。这有时被称为 “模块系统(the module system)”,包括:
- Packages: Scarb的一个功能,可以让你建立、测试和分享crates。
- Crates: 一个模块的树形结构,对应于一个单一的编译单元。
它有一个根目录,并在该目录下的
lib.cairo
文件中定义了一个根模块。 - Modules 和 use: 允许你控制组织结构和作用域。
- Paths: 一个命名例如结构体、函数或模块等项的方式
在这一章中,我们将介绍所有这些特性,讨论它们如何相互作用,以及解释如何使用它们来管理作用域。到最后,你应该对模块系统有一个扎实的理解,并且能够像专家一样使用作用域了!