?
This document uses PHP Chinese website manual Release
所述輔助庫(kù)提供了幾個(gè)方便的功能的接口下用的Lua。盡管基本API為C和Lua之間的所有交互提供了原始函數(shù),但輔助庫(kù)為一些常見(jiàn)任務(wù)提供了更高級(jí)的函數(shù)。
輔助庫(kù)中的所有函數(shù)和類(lèi)型都在頭文件中定義lauxlib.h
并具有前綴luaL_
。
輔助庫(kù)中的所有功能都建立在基本API之上,因此它們不提供任何使用該API無(wú)法完成的功能。盡管如此,使用輔助庫(kù)確保了代碼的更一致性。
輔助庫(kù)中的幾個(gè)函數(shù)在內(nèi)部使用一些額外的堆棧槽。當(dāng)輔助庫(kù)中的函數(shù)使用少于5個(gè)插槽時(shí),它不檢查堆棧大小; 它只是假設(shè)有足夠的插槽。
輔助庫(kù)中的幾個(gè)函數(shù)用于檢查C函數(shù)參數(shù)。由于錯(cuò)誤消息的格式為參數(shù)(例如,“ bad argument #1
”),因此不應(yīng)將這些函數(shù)用于其他堆棧值。
luaL_check*
如果檢查不滿足,稱(chēng)為函數(shù)總是會(huì)引發(fā)錯(cuò)誤。
這里我們按字母順序列出輔助庫(kù)中的所有函數(shù)和類(lèi)型。
luaL_addchar
-?, +?, mvoid luaL_addchar (luaL_Buffer *B, char c);
將該字節(jié)添加c
到緩沖區(qū)B
(請(qǐng)參閱luaL_Buffer
)。
luaL_addlstring
-?, +?, mvoid luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
將s
長(zhǎng)度指向的字符串添加l
到緩沖區(qū)中B
(請(qǐng)參閱luaL_Buffer
)。該字符串可以包含嵌入的零。
luaL_addsize
-?, +?, –void luaL_addsize (luaL_Buffer *B, size_t n);
添加到緩沖區(qū)B
(請(qǐng)參閱luaL_Buffer
)n
以前復(fù)制到緩沖區(qū)的長(zhǎng)度的字符串(請(qǐng)參閱參考資料luaL_prepbuffer
)。
luaL_addstring
-?, +?, mvoid luaL_addstring (luaL_Buffer *B, const char *s);
將指向的由零結(jié)尾的字符串添加s
到緩沖區(qū)B
(請(qǐng)參閱luaL_Buffer
)。
luaL_addvalue
-1, +?, mvoid luaL_addvalue (luaL_Buffer *B);
將堆棧頂部的值添加到緩沖區(qū)B
(請(qǐng)參閱luaL_Buffer
)。彈出該值。
這是字符串緩沖區(qū)中唯一可以(并且必須)用堆棧上的額外元素調(diào)用的函數(shù),這是要添加到緩沖區(qū)的值。
luaL_argcheck
-0, +0, vvoid luaL_argcheck (lua_State *L, int cond, int arg, const char *extramsg);
檢查是否cond
為真。如果不是,則用標(biāo)準(zhǔn)消息引發(fā)錯(cuò)誤(請(qǐng)參閱參考資料luaL_argerror
)。
luaL_argerror
-0, +0, vint luaL_argerror (lua_State *L, int arg, const char *extramsg);
arg
使用包含extramsg
以下注釋的標(biāo)準(zhǔn)消息引發(fā)一個(gè)報(bào)告問(wèn)題的錯(cuò)誤:調(diào)用它的C函數(shù)的參數(shù):
bad argument #arg to 'funcname' (extramsg)
這個(gè)函數(shù)不會(huì)返回。
luaL_Buffer
typedef struct luaL_Buffer luaL_Buffer;
鍵入字符串緩沖區(qū)。
字符串緩沖區(qū)允許C代碼零碎地構(gòu)建Lua字符串。其使用模式如下:
首先聲明一個(gè)b
類(lèi)型的變量luaL_Buffer
。
然后用一個(gè)調(diào)用初始化它luaL_buffinit(L, &b)
。
然后將字符串片段添加到調(diào)用任何luaL_add*
函數(shù)的緩沖區(qū)中。
通過(guò)呼叫完成luaL_pushresult(&b)
。這個(gè)調(diào)用將最后一個(gè)字符串留在棧頂。
如果你事先知道結(jié)果字符串的總大小,你可以像這樣使用緩沖區(qū):
首先聲明一個(gè)b
類(lèi)型的變量luaL_Buffer
。
然后初始化它并sz
通過(guò)調(diào)用預(yù)先分配大小的空間luaL_buffinitsize(L, &b, sz)
。
然后將該字符串復(fù)制到該空間中。
通過(guò)調(diào)用完成luaL_pushresultsize(&b, sz)
,其中sz
是復(fù)制到該空間的結(jié)果字符串的總大小。
在正常操作期間,字符串緩沖區(qū)使用可變數(shù)量的堆棧槽。所以,在使用緩沖區(qū)的時(shí)候,你不能假設(shè)你知道堆棧的頂端在哪里。只要使用平衡,您可以在連續(xù)調(diào)用之間使用堆棧來(lái)緩沖操作; 也就是說(shuō),當(dāng)你調(diào)用一個(gè)緩沖區(qū)操作時(shí),堆棧與前一個(gè)緩沖區(qū)操作之后的堆棧位于同一層。(這條規(guī)則的唯一例外是)luaL_addvalue
。在luaL_pushresult
初始化緩沖區(qū)時(shí),調(diào)用堆棧后返回其級(jí)別,并在其頂部添加最后一個(gè)字符串。
luaL_buffinit
-0, +0, –void luaL_buffinit (lua_State *L, luaL_Buffer *B);
初始化一個(gè)緩沖區(qū)B
。此功能不分配任何空間; 必須將緩沖區(qū)聲明為變量(請(qǐng)參閱luaL_Buffer
)。
luaL_buffinitsize
-?, +?, mchar *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);
相當(dāng)于序列luaL_buffinit
,luaL_prepbuffsize
。
luaL_callmeta
-0, +(0|1), eint luaL_callmeta (lua_State *L, int obj, const char *e);
Calls a metamethod.
如果索引處的對(duì)象obj
具有metatable,并且此metatable具有一個(gè)字段e
,則此函數(shù)將調(diào)用此字段作為其唯一參數(shù)傳遞該對(duì)象。在這種情況下,該函數(shù)返回true,并將該調(diào)用返回的值壓入堆棧。如果沒(méi)有metatable或者沒(méi)有metamethod,這個(gè)函數(shù)返回false(沒(méi)有在棧上壓入任何值)。
luaL_checkany
-0, +0, vvoid luaL_checkany (lua_State *L, int arg);
檢查函數(shù)是否有任何類(lèi)型的參數(shù)(包括零)arg
。
luaL_checkinteger
-0, +0, vlua_Integer luaL_checkinteger (lua_State *L, int arg);
檢查函數(shù)參數(shù)arg
是否為整數(shù)(或可以轉(zhuǎn)換為整數(shù))并將此整型轉(zhuǎn)換為一個(gè)lua_Integer
。
luaL_checklstring
-0, +0, vconst char *luaL_checklstring (lua_State *L, int arg, size_t *l);
檢查函數(shù)參數(shù)arg
是否是字符串并返回此字符串; 如果l
不NULL
填充*l
字符串的長(zhǎng)度。
此功能用于lua_tolstring
獲取其結(jié)果,因此此功能的所有轉(zhuǎn)換和注意事項(xiàng)均適用于此。
luaL_checknumber
-0, +0, vlua_Number luaL_checknumber (lua_State *L, int arg);
檢查函數(shù)參數(shù)arg
是否是數(shù)字并返回此數(shù)字。
luaL_checkoption
-0, +0, vint luaL_checkoption (lua_State *L, int arg, const char *def, const char *const lst[]);
檢查函數(shù)參數(shù)arg
是否為字符串,并在數(shù)組中搜索此字符串lst
(必須以NULL結(jié)尾)。返回找到字符串的數(shù)組中的索引。如果參數(shù)不是字符串或者找不到字符串,則引發(fā)錯(cuò)誤。
如果def
不是NULL
,則def
當(dāng)沒(méi)有參數(shù)arg
或此參數(shù)為零時(shí),該函數(shù)將用作默認(rèn)值。
這是一個(gè)將字符串映射到C枚舉的有用函數(shù)。(Lua庫(kù)中的常規(guī)約定是使用字符串而不是數(shù)字來(lái)選擇選項(xiàng)。)
luaL_checkstack
-0, +0, vvoid luaL_checkstack (lua_State *L, int sz, const char *msg);
將堆棧大小增加到top + sz
元素,如果堆棧無(wú)法增長(zhǎng)到該大小,則會(huì)引發(fā)錯(cuò)誤。msg
是進(jìn)入錯(cuò)誤消息(或NULL
沒(méi)有其他文本)的附加文本。
luaL_checkstring
-0, +0, vconst char *luaL_checkstring (lua_State *L, int arg);
檢查函數(shù)參數(shù)arg
是否為字符串并返回此字符串。
此功能用于lua_tolstring
獲取其結(jié)果,因此此功能的所有轉(zhuǎn)換和注意事項(xiàng)均適用于此。
luaL_checktype
-0, +0, vvoid luaL_checktype (lua_State *L, int arg, int t);
檢查函數(shù)參數(shù)是否arg
具有類(lèi)型t
。請(qǐng)參閱有關(guān)lua_type
類(lèi)型的編碼t
。
luaL_checkudata
-0, +0, vvoid *luaL_checkudata (lua_State *L, int arg, const char *tname);
檢查函數(shù)參數(shù)是否arg
是該類(lèi)型的用戶(hù)數(shù)據(jù)tname
(請(qǐng)參閱luaL_newmetatable
)并返回用戶(hù)數(shù)據(jù)地址(請(qǐng)參閱參考資料lua_touserdata
)。
luaL_checkversion
-0, +0, vvoid luaL_checkversion (lua_State *L);
檢查運(yùn)行呼叫的核心,創(chuàng)建Lua狀態(tài)的核心以及發(fā)起呼叫的代碼是否都使用相同版本的Lua。還檢查運(yùn)行調(diào)用的內(nèi)核和創(chuàng)建Lua狀態(tài)的內(nèi)核是否使用相同的地址空間。
luaL_dofile
-0, +?, eint luaL_dofile (lua_State *L, const char *filename);
加載并運(yùn)行給定的文件。它被定義為以下宏:
(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
如果沒(méi)有錯(cuò)誤,則返回false,如果發(fā)生錯(cuò)誤,則返回true。
luaL_dostring
-0, +?, –int luaL_dostring (lua_State *L, const char *str);
加載并運(yùn)行給定的字符串。它被定義為以下宏:
(luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
如果沒(méi)有錯(cuò)誤,則返回false,如果發(fā)生錯(cuò)誤,則返回true。
luaL_error
-0, +0, vint luaL_error (lua_State *L, const char *fmt, ...);
引發(fā)錯(cuò)誤。錯(cuò)誤消息格式由fmt
加上任何額外的參數(shù)給出,遵循相同的規(guī)則lua_pushfstring
。如果該信息可用,它還會(huì)在消息的開(kāi)始處添加文件名和發(fā)生錯(cuò)誤的行號(hào)。
這個(gè)函數(shù)永遠(yuǎn)不會(huì)返回,但它是一個(gè)在C函數(shù)中使用它的習(xí)慣用法。return luaL_error(args)
luaL_execresult
-0, +3, mint luaL_execresult (lua_State *L, int stat);
該函數(shù)為標(biāo)準(zhǔn)庫(kù)(os.execute
和io.close
)中與進(jìn)程相關(guān)的函數(shù)生成返回值。
luaL_fileresult
-0, +(1|3), mint luaL_fileresult (lua_State *L, int stat, const char *fname);
該功能用于在標(biāo)準(zhǔn)庫(kù)文件有關(guān)的功能(生成的返回值io.open
,os.rename
,file:seek
等等)。
luaL_getmetafield
-0, +(0|1), mint luaL_getmetafield (lua_State *L, int obj, const char *e);
e
從索引處的對(duì)象的元表單中將字段推入堆棧,obj
并返回推送值的類(lèi)型。如果對(duì)象沒(méi)有metatable,或者如果metatable沒(méi)有這個(gè)字段,則不會(huì)推送并返回LUA_TNIL
。
luaL_getmetatable
-0, +1, mint luaL_getmetatable (lua_State *L, const char *tname);
將與名稱(chēng)相關(guān)聯(lián)的元數(shù)據(jù)存入堆棧tname
(請(qǐng)參閱參考資料luaL_newmetatable
)(如果沒(méi)有與該名稱(chēng)相關(guān)的元數(shù)據(jù),則為零)。返回推送值的類(lèi)型。
luaL_getsubtable
-0, +1, eint luaL_getsubtable (lua_State *L, int idx, const char *fname);
確保 index 的值在t[fname]
哪里t
是idx
一個(gè)表,并將該表推入堆棧。如果它發(fā)現(xiàn)上一個(gè)表,則返回true;如果它創(chuàng)建一個(gè)新表,則返回false。
luaL_gsub
-0, +1, mconst char *luaL_gsub (lua_State *L, const char *s, const char *p, const char *r);
創(chuàng)建字符串的副本s
替換字符串出現(xiàn)的任何p
以字符串r
。將結(jié)果字符串推入堆棧并返回。
luaL_len
-0, +0, elua_Integer luaL_len (lua_State *L, int index);
將給定索引處的值的“長(zhǎng)度”作為數(shù)字返回; 它相當(dāng)于#
Lua中的' '運(yùn)算符(參見(jiàn)§3.4.7)。如果操作的結(jié)果不是整數(shù),則引發(fā)錯(cuò)誤。(這種情況只能通過(guò)metamethods發(fā)生。)
luaL_loadbuffer
-0, +1, –int luaL_loadbuffer (lua_State *L, const char *buff, size_t sz, const char *name);
相當(dāng)于luaL_loadbufferx
用mode
等于NULL
。
luaL_loadbufferx
-0, +1, –int luaL_loadbufferx (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
將一個(gè)緩沖區(qū)加載為L(zhǎng)ua塊。此函數(shù)用于lua_load
將大塊加載到buff
大小指向的緩沖區(qū)中sz
。
該函數(shù)返回與。相同的結(jié)果lua_load
。name
是塊名稱(chēng),用于調(diào)試信息和錯(cuò)誤消息。該字符串mode
在函數(shù)中起作用lua_load
。
luaL_loadfile
-0, +1, mint luaL_loadfile (lua_State *L, const char *filename);
相當(dāng)于luaL_loadfilex
用mode
等于NULL
。
luaL_loadfilex
-0, +1, mint luaL_loadfilex (lua_State *L, const char *filename, const char *mode);
將文件加載為L(zhǎng)ua塊。此函數(shù)用于lua_load
將文件加載到名為的文件中filename
。如果filename
是NULL
,則從標(biāo)準(zhǔn)輸入加載。如果以a開(kāi)頭,文件中的第一行將被忽略#
。
該字符串mode
在函數(shù)中起作用lua_load
。
該函數(shù)返回lua_load
與之相同的結(jié)果,但是它具有LUA_ERRFILE
與文件相關(guān)的錯(cuò)誤的額外錯(cuò)誤代碼(例如,它無(wú)法打開(kāi)或讀取文件)。
因?yàn)?code>lua_load這個(gè)函數(shù)只加載塊; 它不會(huì)運(yùn)行它。
luaL_loadstring
-0, +1, –int luaL_loadstring (lua_State *L, const char *s);
將一個(gè)字符串加載為 Lua 塊。該函數(shù)用于lua_load
加載零終止字符串中的塊s
。
該函數(shù)返回與。相同的結(jié)果lua_load
。
另外lua_load
,這個(gè)函數(shù)只加載塊; 它不會(huì)運(yùn)行它。
luaL_newlib
-0, +1, mvoid luaL_newlib (lua_State *L, const luaL_Reg l[]);
創(chuàng)建一個(gè)新表并在列表中注冊(cè)該功能l
。
它被實(shí)現(xiàn)為以下宏:
(luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
數(shù)組l
必須是實(shí)際的數(shù)組,而不是指向它的指針。
luaL_newlibtable
-0, +1, mvoid luaL_newlibtable (lua_State *L, const luaL_Reg l[]);
創(chuàng)建一個(gè)具有優(yōu)化大小的新表,以存儲(chǔ)數(shù)組中的所有條目l
(但不實(shí)際存儲(chǔ)它們)。它旨在與luaL_setfuncs
(參見(jiàn)luaL_newlib
)結(jié)合使用。
它是作為一個(gè)宏實(shí)現(xiàn)的。數(shù)組l
必須是實(shí)際的數(shù)組,而不是指向它的指針。
luaL_newmetatable
-0, +1, mint luaL_newmetatable (lua_State *L, const char *tname);
如果注冊(cè)表已經(jīng)有密鑰tname
,則返回0.否則,創(chuàng)建一個(gè)新表作為用戶(hù)數(shù)據(jù)的元數(shù)據(jù),向該新表__name = tname
添加該對(duì),向注冊(cè)表添加該對(duì)[tname] = new table
,并返回1.(該條目__name
用于通過(guò)一些錯(cuò)誤報(bào)告功能)。
在這兩種情況下,將與tname
注冊(cè)表中相關(guān)的最終值推入堆棧。
luaL_newstate
-0, +0, –lua_State *luaL_newstate (void);
創(chuàng)建一個(gè)新的 Lua 狀態(tài)。它lua_newstate
使用基于標(biāo)準(zhǔn) C realloc
函數(shù)的分配器進(jìn)行調(diào)用,然后設(shè)置一個(gè)恐慌函數(shù)(請(qǐng)參閱第4.6節(jié)),在出現(xiàn)嚴(yán)重錯(cuò)誤時(shí)將錯(cuò)誤消息輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出。
返回新的狀態(tài),或者NULL
是否有內(nèi)存分配錯(cuò)誤。
luaL_openlibs
-0, +0, evoid luaL_openlibs (lua_State *L);
將所有標(biāo)準(zhǔn) Lua 庫(kù)打開(kāi)到給定狀態(tài)。
luaL_opt
-0, +0, eT luaL_opt (L, func, arg, dflt);
This macro is defined as follows:
(lua_isnoneornil(L,(arg)) ? (dflt) : func(L,(arg)))
換言之,如果參數(shù)arg
為零或不存在,宏將導(dǎo)致默認(rèn)值dflt
。否則,它將導(dǎo)致以func
狀態(tài)L
和參數(shù)索引arg
作為參數(shù)調(diào)用的結(jié)果。請(qǐng)注意,dflt
它只在需要時(shí)評(píng)估表達(dá)式。
luaL_optinteger
-0, +0, vlua_Integer luaL_optinteger (lua_State *L, int arg, lua_Integer d);
如果函數(shù)參數(shù)arg
是一個(gè)整數(shù)(或可轉(zhuǎn)換為整數(shù)),則返回此整數(shù)。如果這個(gè)論點(diǎn)不存在或者為零,則返回d
。否則,會(huì)引發(fā)錯(cuò)誤。
luaL_optlstring
-0, +0, vconst char *luaL_optlstring (lua_State *L, int arg, const char *d, size_t *l);
如果函數(shù)參數(shù)arg
是一個(gè)字符串,則返回此字符串。如果這個(gè)論點(diǎn)不存在或者為零,則返回d
。否則,會(huì)引發(fā)錯(cuò)誤。
如果l
不是NULL
,則填充*l
結(jié)果長(zhǎng)度的位置。如果結(jié)果是NULL
(僅返回時(shí)可能d
和d == NULL
),它的長(zhǎng)度被認(rèn)為是零。
此功能用于lua_tolstring
獲取其結(jié)果,因此此功能的所有轉(zhuǎn)換和注意事項(xiàng)均適用于此。
luaL_optnumber
-0, +0, vlua_Number luaL_optnumber (lua_State *L, int arg, lua_Number d);
如果函數(shù)參數(shù)arg
是一個(gè)數(shù)字,則返回該數(shù)字。如果這個(gè)論點(diǎn)不存在或者為零,則返回d
。否則,會(huì)引發(fā)錯(cuò)誤。
luaL_optstring
-0, +0, vconst char *luaL_optstring (lua_State *L, int arg, const char *d);
如果函數(shù)參數(shù)arg
是一個(gè)字符串,則返回此字符串。如果這個(gè)論點(diǎn)不存在或者為零,則返回d
。否則,會(huì)引發(fā)錯(cuò)誤。
luaL_prepbuffer
-?, +?, mchar *luaL_prepbuffer (luaL_Buffer *B);
等同于luaL_prepbuffsize
預(yù)定義的大小LUAL_BUFFERSIZE
。
luaL_prepbuffsize
-?, +?, mchar *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);
將地址返回到大小sz
可以復(fù)制要添加到緩沖區(qū)的字符串的空間B
(請(qǐng)參閱參考資料luaL_Buffer
)。將字符串復(fù)制到此空間后,必須調(diào)用luaL_addsize
字符串的大小才能將其實(shí)際添加到緩沖區(qū)中。
luaL_pushresult
-?, +1, mvoid luaL_pushresult (luaL_Buffer *B);
完成緩沖區(qū)的使用,B
將最后一個(gè)字符串留在棧頂。
luaL_pushresultsize
-?, +1, mvoid luaL_pushresultsize (luaL_Buffer *B, size_t sz);
相當(dāng)于序列luaL_addsize
,luaL_pushresult
。
luaL_ref
-1, +0, mint luaL_ref (lua_State *L, int t);
在索引表中創(chuàng)建并返回一個(gè)引用,t
用于堆棧頂部的對(duì)象(并彈出對(duì)象)。
A reference is a unique integer key. As long as you do not manually add integer keys into table t
, luaL_ref
ensures the uniqueness of the key it returns. You can retrieve an object referred by reference r
by calling lua_rawgeti(L, t, r)
. Function luaL_unref
frees a reference and its associated object.
如果堆棧頂部的對(duì)象為零,則luaL_ref
返回常量LUA_REFNIL
。常數(shù)LUA_NOREF
保證與任何返回的引用不同luaL_ref
。
luaL_Reg
typedef struct luaL_Reg { const char *name; lua_CFunction func;} luaL_Reg;
鍵入要注冊(cè)的函數(shù)數(shù)組luaL_setfuncs
。name
是函數(shù)名稱(chēng),func
是一個(gè)指向函數(shù)的指針。任何數(shù)組都luaL_Reg
必須以?xún)蓚€(gè)name
和兩個(gè)func
都是的哨兵條目結(jié)束NULL
。
luaL_requiref
-0, +1, evoid luaL_requiref (lua_State *L, const char *modname, lua_CFunction openf, int glb);
如果modname
尚未存在package.loaded
,則openf
使用字符串modname
作為參數(shù)調(diào)用函數(shù),并將調(diào)用結(jié)果設(shè)置為package.loaded[modname]
,就好像該函數(shù)已被調(diào)用一樣require
。
如果glb
是,則也將該模塊存儲(chǔ)到全局中modname
。
將模塊的副本留在堆棧上。
luaL_setfuncs
-nup, +0, mvoid luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
將數(shù)組中的所有函數(shù)注冊(cè)到堆棧頂部的表中l
(請(qǐng)參閱luaL_Reg
下面的可選upvalues)。
當(dāng)nup
不為零時(shí),所有函數(shù)都將創(chuàng)建共享nup
值,這些值必須事先在堆棧頂部的堆棧上進(jìn)行推送。這些值在注冊(cè)后從堆棧彈出。
luaL_setmetatable
-0, +0, –void luaL_setmetatable (lua_State *L, const char *tname);
將堆棧頂部的對(duì)象的元表單設(shè)置為與tname
注冊(cè)表中的名稱(chēng)關(guān)聯(lián)的元表單(請(qǐng)參閱參考資料luaL_newmetatable
)。
luaL_Stream
typedef struct luaL_Stream { FILE *f; lua_CFunction closef;} luaL_Stream;
文件句柄的標(biāo)準(zhǔn)表示,由標(biāo)準(zhǔn)I / O庫(kù)使用。
一個(gè)文件句柄被實(shí)現(xiàn)為一個(gè)完整的用戶(hù)數(shù)據(jù),帶有一個(gè)名為metatable LUA_FILEHANDLE
(其中LUA_FILEHANDLE
是一個(gè)具有實(shí)際metatable名稱(chēng)的宏)。該metatable由I / O庫(kù)創(chuàng)建(請(qǐng)參閱參考資料luaL_newmetatable
)。
這個(gè)用戶(hù)數(shù)據(jù)必須以結(jié)構(gòu)開(kāi)始luaL_Stream
; 它可以包含此初始結(jié)構(gòu)之后的其他數(shù)據(jù)。Field f
指向相應(yīng)的C流(或者它可以NULL
指示一個(gè)不完全創(chuàng)建的句柄)。Field closef
指向一個(gè)Lua函數(shù),當(dāng)句柄關(guān)閉或收集時(shí),Lua函數(shù)將被調(diào)用來(lái)關(guān)閉流; 該函數(shù)接收文件句柄作為唯一參數(shù),并且必須返回true(成功的情況下)或nil加上錯(cuò)誤消息(如果有錯(cuò)誤)。一旦Lua調(diào)用此字段,它將字段值更改為NULL
表示句柄已關(guān)閉。
luaL_testudata
-0, +0, mvoid *luaL_testudata (lua_State *L, int arg, const char *tname);
這個(gè)函數(shù)的作用就像luaL_checkudata
,除了當(dāng)測(cè)試失敗時(shí),它返回NULL
而不是引發(fā)錯(cuò)誤。
luaL_tolstring
-0, +1, econst char *luaL_tolstring (lua_State *L, int idx, size_t *len);
將給定索引處的任何Lua值轉(zhuǎn)換為合理格式的C字符串。生成的字符串被壓入堆棧,并由函數(shù)返回。如果len
不是NULL
,該函數(shù)也會(huì)設(shè)置*len
字符串長(zhǎng)度。
如果該值具有__tostring
字段的metatable ,則將luaL_tolstring
值作為參數(shù)調(diào)用相應(yīng)的metamethod,并將調(diào)用的結(jié)果作為結(jié)果。
luaL_traceback
-0, +1, mvoid luaL_traceback (lua_State *L, lua_State *L1, const char *msg, int level);
創(chuàng)建并推送堆棧的回溯L1
。如果msg
不是,NULL
它會(huì)追溯到回溯開(kāi)始時(shí)。該level
參數(shù)告訴在哪個(gè)級(jí)別開(kāi)始回溯。
luaL_typename
-0, +0, –const char *luaL_typename (lua_State *L, int index);
返回給定索引處的值的類(lèi)型的名稱(chēng)。
luaL_unref
-0, +0, –void luaL_unref (lua_State *L, int t, int ref);
ref
從索引處的表中釋放引用t
(請(qǐng)參閱luaL_ref
)。該條目從表中刪除,以便可以收集被引用的對(duì)象。該參考ref
也被釋放以再次使用。
如果ref
是LUA_NOREF
或者LUA_REFNIL
,luaL_unref
什么也不做。
luaL_where
-0, +1, mvoid luaL_where (lua_State *L, int lvl);
將一個(gè)字符串推入堆棧,標(biāo)識(shí)lvl
調(diào)用堆棧中級(jí)別控件的當(dāng)前位置。通常這個(gè)字符串具有以下格式:
chunkname:currentline:
0級(jí)是運(yùn)行功能,1級(jí)是調(diào)用運(yùn)行功能的功能等。
該函數(shù)用于為錯(cuò)誤消息構(gòu)建前綴。