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


24.3.1 – 应用程序代码中的错误处理

通常,您的应用程序代码以不受保护的方式运行。由于其代码不是由 Lua 调用的,因此 Lua 无法设置适当的上下文来捕获错误(即,它无法调用 setjmp)。在这种环境中,当 Lua 遇到“内存不足”之类的错误时,它能做的并不多。它会调用一个恐慌函数,如果该函数返回,则退出应用程序。(您可以使用 lua_atpanic 函数设置自己的恐慌函数。)

并非所有 API 函数都会引发异常。函数 lua_openlua_closelua_pcalllua_load 都是安全的。此外,大多数其他函数仅在内存分配失败的情况下才会引发异常:例如,如果文件名的副本内存不足,luaL_loadfile 就会失败。当程序内存不足时,它们无能为力,因此可能会忽略这些异常。对于这些程序,如果 Lua 内存不足,恐慌是可以的。

如果您不希望应用程序退出,即使在内存分配失败的情况下也是如此,那么您必须以受保护模式运行代码。大多数(或全部)Lua 代码通常通过对 lua_pcall 的调用运行;因此,它以受保护模式运行。即使在内存分配失败的情况下,lua_pcall 也会返回一个错误代码,使解释器保持一致的状态。如果您还想保护所有与 Lua 交互的 C 代码,则可以使用 lua_cpcall。(有关此函数的更多详细信息,请参见参考手册;有关其用法的示例,请参见 Lua 发行版中的文件 lua.c。)