跳到正文豫言豫言教程与指南

第 10 章:把程序拆成模块

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

新建一个模块

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

寻观「豫章」之书。

「加倍」乃化「数」为「数」者也。
「加倍」者得「其数」而
 「其数」乘「二」
也。

现在目录中的文件如下:

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

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

从入口导入并调用

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

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

「书」于(「述数」于(「数值工具」之「加倍」于「二一」))。

执行 ./豫构。林檎。豫行 构建 教程练习 --输出 教程练习.wasm,再运行 node 豫言操作系统/宿主/节点/宿主.cjs 教程练习.wasm,应输出 42。

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

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

导入和打开有什么区别

寻 导入模块,并用路径的最后一段给它命名,所以能写 「数值工具」之「加倍」;观 打开已经导入的模块,让其中的名称可以直接使用。两者组合成 寻观,一步完成导入和打开。例如,把入口的第二行改为:

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

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

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

包依赖与默认导入

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

只写包名的导入(如 寻观「豫章」之书。)按该库包描述里的「默认导入」展开:它是一个模块列表,寻观「豫章」之书。 就是把列表里的各个模块依次打开。标准库的默认导入列出了常用的前置模块(内建类型、列表、字符串、整数运算、打印等),其他标准库模块要写出完整路径,如 寻观「豫章」之「形制」之「名录」之书。。想让自己的库也有这样的入口,就在包描述的「类型」里写「默认导入」。初学时先掌握本章的双文件例子,再按需要查包系统中的“默认导入”和仓库包构建中的包边界规则。

练习

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

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