本第一版是为 Lua 5.0 编写的。虽然对后续版本仍然有很大的参考价值,但有一些不同之处。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目


27.3 – 在 C 函数中存储状态

C 函数经常需要保留一些非局部数据,即在函数调用后仍然存在的数据。在 C 中,我们通常使用全局变量或静态变量来满足此需求。但是,当您为 Lua 编程库函数时,全局变量和静态变量并不是一种好方法。首先,您无法将通用 Lua 值存储在 C 变量中。其次,使用此类变量的库无法在多个 Lua 状态中使用。

另一种方法是将此类值存储到 Lua 全局变量中。此方法解决了前两个问题。Lua 全局变量存储任何 Lua 值,并且每个独立状态都有自己独立的一组全局变量。但是,这并不总是一个令人满意的解决方案,因为 Lua 代码可以篡改这些全局变量,从而损害 C 数据的完整性。为了避免这个问题,Lua 提供了一个单独的表,称为注册表,C 代码可以自由使用,但 Lua 代码无法访问。