lapi.c和lauxlib.c里包含了大部分的lua的capi。所谓capi是指在c形式的api接口,可以在c/c++/c#/…中可以调用到的api,但是lua中并不一定有对应的方法。ldebug.c里有一些调试用的capi(后续文章会介绍)。另外一些capi,便是打开lua库函数的capi,在lualib.h里集中声明。
lapi.c
基础的capi。
state相关
lua_checkstatck
检查栈的深度,如果没有超过最大深度便会扩充栈,否则返回0(交给上层处理)。
lua_xmove
将n个对象从一个状态(协程)移动到另一个状态(协程)上。
lua_setlevel
设置状态(协程)的调用层次,用于resume。
lua_atpanic
设置状态(协程)的内部错误处理方法。
lua_newthread
新建一个状态(协程)。
stack相关
lua_gettop
获取栈顶,一般用于检查参数个数。
lua_settop
设置栈顶,一般用于设置返回值个数。之前的文章在编写库函数的时候,会返回一个返回值数量,这个数量要与当前函数栈的深度一致,否则会出问题。
lua_remove
在函数栈的某个位置上移除对象。
lua_insert
在函数栈的某个位置上插入对象。
lua_replace
在函数栈的某个位置上替换成当前栈顶的对象。
lua_pushvalue
最常用的,在栈顶上压入对象,与之对应的是lua_pop,实际上就是lua_settop(宏定义)。
type相关
lua_type
类型:0-nil,1-bool,2-lightuserdata,3-number,4-string,5-table,6-function,7-userdata,8-thread。-1代表啥也没有(不是nil)。
lua_typename
类型名,lua里的type方法实际上调用了上面二者。
lua_iscfunction
是否是c方法。
lua_isnumber
是否是number,或者可以转换成number。
lua_isstring
是否是string或者number。
lua_isuserdata
是否是userdata或lightuserdata。
lua_rawequal
绕过元方法判断是否相等。
lua_equal
(如果有,便使用元方法)判断是否相等。
lua_lessthan
(如果有,便使用元方法)判断是否小于。
lua_tonumber
转换成number(失败返回0)。
lua_tointeger
转换成number并向下取整(失败返回0),64位下返回值类型为int64,只有52-53位精度(有机会再细说)。32位下返回值为int,没有损失精度。
lua_toboolean
如果是false或nil或0返回false,否则返回true。
lua_tolstring
转换成字符串并获取长度。
lua_objlen
获取对象的长度,暂时可以认为与#操作符类似。
lua_tocfunction
转换成c方法,失败返nil。
lua_touserdata
转换成userdata或lightuserdata,失败返nil。
lua_tothread
转换成状态(协程),失败返nil。
lua_topointer
转换成指针。
push相关
lua_pushnil
压入nil。
lua_pushnumber
压入number。
lua_pushinteger
压入向下取整的number。
lua_pushlstring
压入string,附带长度信息。
lua_pushstring
压入string,长度信息自己算。
lua_pushvfstring
压入格式化变参的string。
lua_pushfstring
压入格式化变参的string,与上面的并没什么区别,只不过上面的是为了兼用上层调用的变参(详情请搜索va_list)。
lua_pushcclosure
压入c方法,并根据栈上的参数创建闭包。
lua_pushboolean
压入bool。
lua_pushlightuserdata
压入lightuserdata。
lua_pushthread
压入状态(协程)。
获取Lua->stack
lua_gettable
获取栈上的table的某个字段,键为栈顶对象。
lua_getfield
获取栈上的table的某个字段。
lua_rawget
绕过元表获取table的元素,键为栈顶的对象。
lua_rawgeti
绕过元表获取数组类型table的元素。
lua_createtable
新建一个table
lua_getmetatable
获取元表,如果不是table或userdata,那么获取该类型的元表。
lua_getfenv
获取环境变量table。
设置stack->Lua
lua_settable
设置栈上的table的某个字段,键和值为栈顶前两个对象。
lua_setfield
设置栈上的table的某个字段,值为栈顶对象。
lua_rawset
绕过元表设置table的元素,键和值为栈顶前两个对象。
lua_rawseti
绕过元表设置table的元素,值为栈顶对象。
lua_setmetatable
设置元表,如果不是table或userdata,那么为该类型的设置元表。
lua_setfenv
设置环境变量table。
load & call
lua_call
调用方法。
lua_pcall
类似lua的方法xpcall,保护调用。
lua_cpcall
保护调用c方法,可传入一个指针作为参数。
lua_load
加载lua代码。
lua_dump
加载lua字节码。
lua_status
返回状态(协程)的状态。
其他
lua_gc
垃圾回收。
lua_error
报错
lua_next
获取table的下一对键值。从nil开始。
lua_concat
拼接字符串。
lua_getallocf
获取内存分配函数。
lua_setallocf
设置内存分配函数。
lua_newuserdata
新建userdata。
lua_getupvalue
获取upvalue。
lua_setupvalue
设置upvalue。
lauxlib.c
扩展的capi
error相关
luaL_argerror
参数错误,将一些字符串的拼接起来组成错误信息,最后调用luaL_error。
luaL_typerror
类型错误,同上。
luaL_where
获取并拼接方法的信息。
luaL_error
缺省错误,提供格式化变参。
type相关
luaL_checkoption
检查参数列表,如失败便报错。
luaL_newmetatable
为全局对象新建元表。
luaL_checkudata
检查全局对象是否与传入的userdata相同,如失败便报错。
luaL_checkstack
检查栈空间,如失败便报错。
luaL_checktype
检查类型,如失败便报错。
luaL_checkany
检查是否有参数,如失败便报错。
luaL_checklstring
检查string,如失败便报错。
luaL_optlstring
检查string,如失败使用缺省值。
luaL_checknumber
检查number,如失败便报错。
luaL_optnumber
检查number,如失败使用缺省值。
luaL_checkinteger
检查“integer”,如失败便报错。
luaL_optinteger
检查“integer”,如失败使用缺省值。
meta相关
luaL_getmetafield
获取元表字段。
luaL_callmeta
调用元方法。
lib相关
luaL_register
注册库函数。
luaL_gsub
替换字符串。
luaL_findtable
根据路径查询table,路径形式可能为aa.bb.cc,一次查找aa、bb、cc,如果没有则新建。
buffer相关
luaL_prepbuffer
准备缓冲区。
luaL_addlstring
将string加入缓冲区,附带长度信息。
luaL_addstring
将string加入缓冲区,长度自己算。
luaL_pushresult
将buffer里的字符串拼接起来,压入栈中。
luaL_addvalue
将栈顶对象加入缓冲区。
luaL_buffinit
初始化缓冲区。
ref相关
luaL_ref
添加对某个对象的引用,方便获取某个对象。
luaL_unref
取消对某个对象的引用。
load相关
luaL_loadfile
加载文件,并解析。
luaL_loadbuffer
加载源码/字节码字符串,并解析。
luaL_loadstring
同上。
state相关
luaL_newstate
新建一个状态(协程)。
参考文献
https://www.codingnow.com/2000/download/lua_manual.html
————————————————