Rust 功能函数的关系、包和模块简介

一、功能函数之间的关系

前面看到,一个文件中可以定义多个 function 功能函数,这些功能函数可以被相互使用。程序的入口是main()。

在一个文件中,各个功能函数的定义和使用不受功能函数定义的顺序约束。也就是说,不需要像 C 语言一样,在使用一个函数而还没有定义函数之前要有一个声明语句;而像 java 一样,只要声明的功能函数在一个文件内,可以忽略功能函数在文件中出现的顺序。

二、文件的包管理

当一个文件中的功能函数越来越多,阅读和修改都是个问题。因此需要进行功能分离,按照操作或者功能将功能函数分别保存在不同的文件中。

另外,从软件工程的角度考虑软件的复用和封装,有些功能函数需要设置成可以外部访问的 public ,有些则要设计成仅供内部使用的 private 。

Rust 项目的包管理使用术语 crate,等同于 java 中的package。
cargo是Rust内置的包管理工具。

一个crate 可以是可以运行的Rust 程序,也可以是一个用于提供功能函数的 library 仓库 (像android的项目区分是可运行的app和lib一样)。

除了 crate ,Rust还提供了 Module 模块的机制。在每个 crate中可以包含多个 module 模块,其中一个被默认为是(root module)根模块。根模块与其他模块构成树形结构,就像 XML 文件中根元素与其他子元素的关系 或者 文件夹中包含的多个子文件夹的关系一样。

在进行 module 和实战操作之前,先介绍一下 Rust 的项目管理工具: cargo ,前面的文章中已经使用过了,类似 java 中的 maven工具,用于项目的创建、编译、运行、打包、部署以及包之间的依赖关系,依赖包的自动下载和更新。