使用包、Crate 和模块管理Cairo项目

当你编写大型程序时,组织你的代码将变得越来越重要。 通过对相关的功能进行分组,并将具有不同功能的代码分开,你就可以清楚地知道在哪里可以找到实现某一特定的代码,以及到哪里去改变一个功能的工作方式。

到目前为止,我们所写的程序都是在一个文件中的一个模块中。 伴随着项目的增长,你应该通过将代码分解为多个模块和多个文件来组织代码。 伴随着包的增长,你可以将包中的部分代码提取出来,做成独立的 crate,这些 crate 则作为外部依赖项。 本章将会涵盖所有这些概念。

我们也会讨论封装来实现细节,这可以使你更高级地重用代码:你实现了一个操作后,其他的代码可以通过该代码的公共接口来进行调用,而不需要知道它是如何实现的。

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

Cairo有许多功能可以让你管理代码的组织。这些功能。这有时被称为 “模块系统(the module system)”,包括:

  • Packages: Scarb的一个功能,可以让你建立、测试和分享crates。
  • Crates: 一个模块的树形结构,对应于一个单一的编译单元。 它有一个根目录,并在该目录下的lib.cairo文件中定义了一个根模块。
  • Modulesuse: 允许你控制组织结构和作用域。
  • Paths: 一个命名例如结构体、函数或模块等项的方式

在这一章中,我们将介绍所有这些特性,讨论它们如何相互作用,以及解释如何使用它们来管理作用域。到最后,你应该对模块系统有一个扎实的理解,并且能够像专家一样使用作用域了!

Last change: 2023-09-20, commit: cbb0049