Lua 5 3註冊C 類相關API

2022-04-12 09:58:58 字數 643 閱讀 1602

int lual_newmetatable (lua_state *l, const char *tname);

如果登錄檔中不存在名為tname的表,則在登錄檔中建立乙個名為tname的表,並將這個表壓棧,返回值為1;

如果登錄檔中已存在名為tname的表,則直接將這個表壓棧,返回值為0。

void lual_requiref (lua_state *l, const char *modname, lua_cfunction openf, int glb);

如果modname在package.loaded中不存在,則呼叫openf,並以字串modname作為實參,然後將結果儲存在package.loaded[modname]中,和lua指令碼中require函式的功能類似;

如果glb為true,那麼也會將結果儲存到全域性變數modname中。

這個函式會在堆疊上保留乙個module的副本。

* 類的名字和模組的名字可以是不同的。

通俗地說,類的表儲存在登錄檔中,而模組的表存在package.loaded中。

如果需要把類註冊到模組中,需要把類的表作為乙個元素設定到模組的表中,這時需要用乙個名字來索引模組表中的類表。

類的表在登錄檔中不需要一定使用字串來做索引,也可以使用light userdata和引用機制。

lua5 3異常機制

lua本質上利用c函式來操作lua虛擬機器。lua虛擬機器對於c來說只是在堆上的記憶體物件。lua有自己的執行物件 協程 每個協程有自己的呼叫棧。比如下面的函式 function add x,y return x y end如果x或y不能進行加法操作,在呼叫中就會產生異常。產生了異常,虛擬機器需要對...

lua5 3資料結構

由於lua版本迭代之間,資料結構和函式都會部分變化 以下是我分析的lua.h中的資訊,以便確定版本 define lua version major 5 define lua version minor 3 define lua version num 503 define lua version ...

Lua5 3遇到的坑

attempt to call a nil value global unpack 在lua 5.2和5.3的版本中,全域性的unpack函式已經被移除了,改為table.unpack,所以如果用到的第三方庫或者源 使用了unpack方法,可以在 前面加上 local unpack unpack o...