Skip to content

4 - 应用编程接口

本章讲述Lua的C API,即可以让宿主程序和Lua通信的C函数集合。所有API函数和相关类型及常量都在头文件lua.h中被定义。

即使我们说的是术语“函数”,但其实API中的某些工具可能是一个宏。除非另有说明,这些宏内部只使用一次它的参数(除了第一个参数,通常都是Lua状态机对象),因此不会产生任何隐藏的副作用。

大部分的C库中,Lua的API函数都不会检查参数的有效性和一致性。然而,你可以通过定义Lua的编译宏 LUA_USE_APICHECK 宏来改变此行为。

Lua库是完全可重入的——它没有全局变量。它把所有需要的信息都保存到一个叫做 Lua状态机(Lua state) 的动态结构中。

每个Lua状态机都有一个或多个Lua线程(就是协程),它们相互独立,却又共同执行。lua_State类型(尽管叫这么个名字,很容易让人误会好吗)就引用了单个Lua线程。(Lua线程也间接引用了相关联的Lua状态机。)

库中每个函数的第一个参数都必须由指向Lua线程的指针传递,除了lua_newstate,此函数会从头创建一个Lua状态机,然后返回一个指向新状态机里的Lua主线程的指针。