lapi.c和lauxlib.c里包含了大部分的lua的capi。所謂capi是指在c形式的api接口,可以在c/c++/c#/…中可以調(diào)用到的api,但是lua中并不一定有對(duì)應(yīng)的方法。ldebug.c里有一些調(diào)試用的capi(后續(xù)文章會(huì)介紹)。另外一些capi,便是打開(kāi)lua庫(kù)函數(shù)的capi,在lualib.h里集中聲明。
lapi.c
基礎(chǔ)的capi。
state相關(guān)
lua_checkstatck
檢查棧的深度,如果沒(méi)有超過(guò)最大深度便會(huì)擴(kuò)充棧,否則返回0(交給上層處理)。
lua_xmove
將n個(gè)對(duì)象從一個(gè)狀態(tài)(協(xié)程)移動(dòng)到另一個(gè)狀態(tài)(協(xié)程)上。
lua_setlevel
設(shè)置狀態(tài)(協(xié)程)的調(diào)用層次,用于resume。
lua_atpanic
設(shè)置狀態(tài)(協(xié)程)的內(nèi)部錯(cuò)誤處理方法。
lua_newthread
新建一個(gè)狀態(tài)(協(xié)程)。
stack相關(guān)
lua_gettop
獲取棧頂,一般用于檢查參數(shù)個(gè)數(shù)。
lua_settop
設(shè)置棧頂,一般用于設(shè)置返回值個(gè)數(shù)。之前的文章在編寫庫(kù)函數(shù)的時(shí)候,會(huì)返回一個(gè)返回值數(shù)量,這個(gè)數(shù)量要與當(dāng)前函數(shù)棧的深度一致,否則會(huì)出問(wèn)題。
lua_remove
在函數(shù)棧的某個(gè)位置上移除對(duì)象。
lua_insert
在函數(shù)棧的某個(gè)位置上插入對(duì)象。
lua_replace
在函數(shù)棧的某個(gè)位置上替換成當(dāng)前棧頂?shù)膶?duì)象。
lua_pushvalue
最常用的,在棧頂上壓入對(duì)象,與之對(duì)應(yīng)的是lua_pop,實(shí)際上就是lua_settop(宏定義)。
type相關(guān)
lua_type
類型:0-nil,1-bool,2-lightuserdata,3-number,4-string,5-table,6-function,7-userdata,8-thread。-1代表啥也沒(méi)有(不是nil)。
lua_typename
類型名,lua里的type方法實(shí)際上調(diào)用了上面二者。
lua_iscfunction
是否是c方法。
lua_isnumber
是否是number,或者可以轉(zhuǎn)換成number。
lua_isstring
是否是string或者number。
lua_isuserdata
是否是userdata或lightuserdata。
lua_rawequal
繞過(guò)元方法判斷是否相等。
lua_equal
(如果有,便使用元方法)判斷是否相等。
lua_lessthan
(如果有,便使用元方法)判斷是否小于。
lua_tonumber
轉(zhuǎn)換成number(失敗返回0)。
lua_tointeger
轉(zhuǎn)換成number并向下取整(失敗返回0),64位下返回值類型為int64,只有52-53位精度(有機(jī)會(huì)再細(xì)說(shuō))。32位下返回值為int,沒(méi)有損失精度。
lua_toboolean
如果是false或nil或0返回false,否則返回true。
lua_tolstring
轉(zhuǎn)換成字符串并獲取長(zhǎng)度。
lua_objlen
獲取對(duì)象的長(zhǎng)度,暫時(shí)可以認(rèn)為與#操作符類似。
lua_tocfunction
轉(zhuǎn)換成c方法,失敗返nil。
lua_touserdata
轉(zhuǎn)換成userdata或lightuserdata,失敗返nil。
lua_tothread
轉(zhuǎn)換成狀態(tài)(協(xié)程),失敗返nil。
lua_topointer
轉(zhuǎn)換成指針。
push相關(guān)
lua_pushnil
壓入nil。
lua_pushnumber
壓入number。
lua_pushinteger
壓入向下取整的number。
lua_pushlstring
壓入string,附帶長(zhǎng)度信息。
lua_pushstring
壓入string,長(zhǎng)度信息自己算。
lua_pushvfstring
壓入格式化變參的string。
lua_pushfstring
壓入格式化變參的string,與上面的并沒(méi)什么區(qū)別,只不過(guò)上面的是為了兼用上層調(diào)用的變參(詳情請(qǐng)搜索va_list)。
lua_pushcclosure
壓入c方法,并根據(jù)棧上的參數(shù)創(chuàng)建閉包。
lua_pushboolean
壓入bool。
lua_pushlightuserdata
壓入lightuserdata。
lua_pushthread
壓入狀態(tài)(協(xié)程)。
獲取Lua->stack
lua_gettable
獲取棧上的table的某個(gè)字段,鍵為棧頂對(duì)象。
lua_getfield
獲取棧上的table的某個(gè)字段。
lua_rawget
繞過(guò)元表獲取table的元素,鍵為棧頂?shù)膶?duì)象。
lua_rawgeti
繞過(guò)元表獲取數(shù)組類型table的元素。
lua_createtable
新建一個(gè)table
lua_getmetatable
獲取元表,如果不是table或userdata,那么獲取該類型的元表。
lua_getfenv
獲取環(huán)境變量table。
設(shè)置stack->Lua
lua_settable
設(shè)置棧上的table的某個(gè)字段,鍵和值為棧頂前兩個(gè)對(duì)象。
lua_setfield
設(shè)置棧上的table的某個(gè)字段,值為棧頂對(duì)象。
lua_rawset
繞過(guò)元表設(shè)置table的元素,鍵和值為棧頂前兩個(gè)對(duì)象。
lua_rawseti
繞過(guò)元表設(shè)置table的元素,值為棧頂對(duì)象。
lua_setmetatable
設(shè)置元表,如果不是table或userdata,那么為該類型的設(shè)置元表。
lua_setfenv
設(shè)置環(huán)境變量table。
load & call
lua_call
調(diào)用方法。
lua_pcall
類似lua的方法xpcall,保護(hù)調(diào)用。
lua_cpcall
保護(hù)調(diào)用c方法,可傳入一個(gè)指針作為參數(shù)。
lua_load
加載lua代碼。
lua_dump
加載lua字節(jié)碼。
lua_status
返回狀態(tài)(協(xié)程)的狀態(tài)。
其他
lua_gc
垃圾回收。
lua_error
報(bào)錯(cuò)
lua_next
獲取table的下一對(duì)鍵值。從nil開(kāi)始。
lua_concat
拼接字符串。
lua_getallocf
獲取內(nèi)存分配函數(shù)。
lua_setallocf
設(shè)置內(nèi)存分配函數(shù)。
lua_newuserdata
新建userdata。
lua_getupvalue
獲取upvalue。
lua_setupvalue
設(shè)置upvalue。
lauxlib.c
擴(kuò)展的capi
error相關(guān)
luaL_argerror
參數(shù)錯(cuò)誤,將一些字符串的拼接起來(lái)組成錯(cuò)誤信息,最后調(diào)用luaL_error。
luaL_typerror
類型錯(cuò)誤,同上。
luaL_where
獲取并拼接方法的信息。
luaL_error
缺省錯(cuò)誤,提供格式化變參。
type相關(guān)
luaL_checkoption
檢查參數(shù)列表,如失敗便報(bào)錯(cuò)。
luaL_newmetatable
為全局對(duì)象新建元表。
luaL_checkudata
檢查全局對(duì)象是否與傳入的userdata相同,如失敗便報(bào)錯(cuò)。
luaL_checkstack
檢查??臻g,如失敗便報(bào)錯(cuò)。
luaL_checktype
檢查類型,如失敗便報(bào)錯(cuò)。
luaL_checkany
檢查是否有參數(shù),如失敗便報(bào)錯(cuò)。
luaL_checklstring
檢查string,如失敗便報(bào)錯(cuò)。
luaL_optlstring
檢查string,如失敗使用缺省值。
luaL_checknumber
檢查number,如失敗便報(bào)錯(cuò)。
luaL_optnumber
檢查number,如失敗使用缺省值。
luaL_checkinteger
檢查“integer”,如失敗便報(bào)錯(cuò)。
luaL_optinteger
檢查“integer”,如失敗使用缺省值。
meta相關(guān)
luaL_getmetafield
獲取元表字段。
luaL_callmeta
調(diào)用元方法。
lib相關(guān)
luaL_register
注冊(cè)庫(kù)函數(shù)。
luaL_gsub
替換字符串。
luaL_findtable
根據(jù)路徑查詢table,路徑形式可能為aa.bb.cc,一次查找aa、bb、cc,如果沒(méi)有則新建。
buffer相關(guān)
luaL_prepbuffer
準(zhǔn)備緩沖區(qū)。
luaL_addlstring
將string加入緩沖區(qū),附帶長(zhǎng)度信息。
luaL_addstring
將string加入緩沖區(qū),長(zhǎng)度自己算。
luaL_pushresult
將buffer里的字符串拼接起來(lái),壓入棧中。
luaL_addvalue
將棧頂對(duì)象加入緩沖區(qū)。
luaL_buffinit
初始化緩沖區(qū)。
ref相關(guān)
luaL_ref
添加對(duì)某個(gè)對(duì)象的引用,方便獲取某個(gè)對(duì)象。
luaL_unref
取消對(duì)某個(gè)對(duì)象的引用。
load相關(guān)
luaL_loadfile
加載文件,并解析。
luaL_loadbuffer
加載源碼/字節(jié)碼字符串,并解析。
luaL_loadstring
同上。
state相關(guān)
luaL_newstate
新建一個(gè)狀態(tài)(協(xié)程)。
參考文獻(xiàn)
https://www.codingnow.com/2000/download/lua_manual.html
————————————————