第 10 章:把程序拆成模块

前面的函数都写在入口文件里。当几个程序需要共用同一组函数时,可以把它们放到单独的模块中。本章继续使用第一章的 教程练习 包,新增一个文件并从入口调用它。

新建一个模块

教程练习 目录中创建 数值工具。豫,完整内容如下:

寻观「标准库」之书。

「加倍」乃化「整数」而「整数」也。
「加倍」者会「数」而「乘」于「数」于「二」也。

现在目录中的文件如下:

教程练习/
    教程练习。包。豫
    包说明.汉语.md
    包说明.文言.md
    入口。豫
    数值工具。豫

包配置沿用第一章的内容,仍以 入口 为程序入口,并直接依赖标准库。

从入口导入并调用

入口。豫 替换为下面的完整程序:

寻观「标准库」之书。
寻「教程练习」之「数值工具」之书。

「打印行」于(「整数表示」于(「数值工具」之「加倍」于「二一」))。

执行 ./yy豫构 构建 教程练习 --输出 yy教程练习,再运行 ./yy教程练习,应输出 42

导入路径第一段是包名 教程练习,后面是包内的模块路径 数值工具。即使两个文件在同一个目录、同一个包里,也要写出包名。

「数值工具」之「加倍」 表示访问模块中的加倍函数。保留前缀能让读者直接看出函数来自哪里。

导入和打开有什么区别

导入模块, 打开模块,让其中的名称可以直接使用。两者组合成 寻观。例如,把入口的第二行改为:

寻观「教程练习」之「数值工具」之书。

后面就可以直接写 「加倍」于「二一」。这与从第一章开始使用的 寻观「标准库」之书。 是同样的操作。

如果两个模块提供同名函数,保留模块前缀更容易区分。不要为了少写几个字而把所有模块都打开。

包依赖与重新导出

包只能导入自身和配置中声明的直接依赖。当前练习包依赖标准库,因此每个模块都可以导入标准库;这并不代表它能直接使用标准库所依赖的其他包。

如果要把多个模块汇总成统一接口,会用到 ,它把模块内容继续导出给使用当前模块的代码。寻诵 组合导入与导出,寻观诵 还会在当前模块打开这些名称。初学时先掌握本章的双文件例子,再按需要查仓库包构建中的总集和包边界规则。

练习

在数值工具中加入 「平方」,从入口分别调用加倍和平方,输入都为 6,预期得到 12 和 36。然后在“保留模块前缀”和“导入并打开”两种写法之间切换,确认计算结果没有变化。

上一章 · 下一章:文本与输入输出 · 目录