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搅轿,便是打開lua庫函數(shù)的capi病涨,在lualib.h里集中聲明。
lapi.c
基礎(chǔ)的capi璧坟。
state相關(guān)
lua_checkstatck
檢查棧的深度既穆,如果沒有超過最大深度便會(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ù)胳挎。之前的文章在編寫庫函數(shù)的時(shí)候饼疙,會(huì)返回一個(gè)返回值數(shù)量,這個(gè)數(shù)量要與當(dāng)前函數(shù)棧的深度一致慕爬,否則會(huì)出問題窑眯。
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代表啥也沒有(不是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
繞過元方法判斷是否相等。
lua_equal
(如果有钞护,便使用元方法)判斷是否相等盖喷。
lua_lessthan
(如果有,便使用元方法)判斷是否小于难咕。
lua_tonumber
轉(zhuǎn)換成number(失敗返回0)课梳。
lua_tointeger
轉(zhuǎn)換成number并向下取整(失敗返回0)距辆,64位下返回值類型為int64,只有52-53位精度(有機(jī)會(huì)再細(xì)說)惦界。32位下返回值為int挑格,沒有損失精度。
lua_toboolean
如果是false或nil或0返回false沾歪,否則返回true漂彤。
lua_tolstring
轉(zhuǎn)換成字符串并獲取長度。
lua_objlen
獲取對(duì)象的長度灾搏,暫時(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烫沙,附帶長度信息匹层。
lua_pushstring
壓入string,長度信息自己算锌蓄。
lua_pushvfstring
壓入格式化變參的string升筏。
lua_pushfstring
壓入格式化變參的string,與上面的并沒什么區(qū)別瘸爽,只不過上面的是為了兼用上層調(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
繞過元表獲取table的元素,鍵為棧頂?shù)膶?duì)象蔚晨。
lua_rawgeti
繞過元表獲取數(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
繞過元表設(shè)置table的元素析孽,鍵和值為棧頂前兩個(gè)對(duì)象搭伤。
lua_rawseti
繞過元表設(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開始帘营。
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ò)誤杜窄,將一些字符串的拼接起來組成錯(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
檢查椢蒙。空間,如失敗便報(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
注冊庫函數(shù)克胳。
luaL_gsub
替換字符串。
luaL_findtable
根據(jù)路徑查詢table,路徑形式可能為aa.bb.cc,一次查找aa梆靖、bb、cc笔诵,如果沒有則新建返吻。
buffer相關(guān)
luaL_prepbuffer
準(zhǔn)備緩沖區(qū)。
luaL_addlstring
將string加入緩沖區(qū)乎婿,附帶長度信息测僵。
luaL_addstring
將string加入緩沖區(qū),長度自己算次酌。
luaL_pushresult
將buffer里的字符串拼接起來恨课,壓入棧中。
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
————————————————