第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些差异。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还将帮助支持 Lua 项目


15 – 包

许多语言提供机制来组织其全局名称空间,例如 Modula 中的模块、Java 和 Perl 中的或 C++ 中的命名空间。每种机制都对包内声明的元素的使用、可见性和其他细节有不同的规则。尽管如此,所有这些机制都提供了一种基本机制来避免在不同库中定义的名称之间发生冲突。每个库都创建自己的命名空间,该命名空间内定义的名称不会干扰其他命名空间中的名称。

Lua 不提供任何明确的包机制。但是,我们可以使用该语言提供的基本机制轻松实现它们。其主要思想是使用表来表示每个包,就像基本库所做的那样。

使用表来实现包的一个明显好处是,我们可以像操作任何其他表一样操作包,并利用 Lua 的全部功能来创建额外的工具。在大多数语言中,包不是一等值(即,它们不能存储在变量中、作为参数传递给函数等),因此这些语言需要针对包的每个额外技巧使用特殊机制。

在 Lua 中,虽然我们始终将包表示为表,但有几种不同的方法来编写包。在本章中,我们将介绍其中一些方法。