第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于更高版本,但存在一些差异。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目。
用 Lua 编程 | ||
第四部分。C API 第 24 章。C API 概述 |
通常,您的应用程序代码以不受保护的方式运行。由于其代码不是由 Lua 调用的,因此 Lua 无法设置适当的上下文来捕获错误(即,它无法调用 setjmp
)。在这种环境中,当 Lua 遇到“内存不足”之类的错误时,它能做的并不多。它会调用一个恐慌函数,如果该函数返回,则退出应用程序。(您可以使用 lua_atpanic
函数设置自己的恐慌函数。)
并非所有 API 函数都会引发异常。函数 lua_open
、lua_close
、lua_pcall
和 lua_load
都是安全的。此外,大多数其他函数仅在内存分配失败的情况下才会引发异常:例如,如果文件名的副本内存不足,luaL_loadfile
就会失败。当程序内存不足时,它们无能为力,因此可能会忽略这些异常。对于这些程序,如果 Lua 内存不足,恐慌是可以的。
如果您不希望应用程序退出,即使在内存分配失败的情况下也是如此,那么您必须以受保护模式运行代码。大多数(或全部)Lua 代码通常通过对 lua_pcall
的调用运行;因此,它以受保护模式运行。即使在内存分配失败的情况下,lua_pcall
也会返回一个错误代码,使解释器保持一致的状态。如果您还想保护所有与 Lua 交互的 C 代码,则可以使用 lua_cpcall
。(有关此函数的更多详细信息,请参见参考手册;有关其用法的示例,请参见 Lua 发行版中的文件 lua.c
。)
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |