lua 中呼叫函式的坑點

2021-07-13 23:22:41 字數 525 閱讀 4172

今天在工作中遇到乙個神奇的問題,是我之前使用lua沒有遇見過的,具體情況是這樣的:

乙個叫ranklist的lua模組,有乙個getranklist(rank_type,rank_sub_type)的函式

需要在uiranklist的lua模組中呼叫這個函式。

即:這個ranktype.rt_qualifying_new_stats 的型別是userdata,是在c#層定義的乙個enum。

然後我得到了乙個報錯說這個索引查不到東西----nil

我在呼叫函式內部列印了第乙個引數居然是table型別,然後我瞬間矇逼..

what a ****?????

原來在lua中有這樣乙個語法糖,模組呼叫函式如果訪問符是 : ,lua就會自動預設你的第乙個引數是這個呼叫的模組自身,也就是說我剛才測試列印的函式內的第乙個引數其實是self,也就當然是table了.

其實前幾天也遇見過類似的情況就是在模組內部呼叫成員函式的時候,我寫成了 "." 來呼叫,然後使用self.獲得成員變數,這樣也就出錯了,因為這個self是找不到的.

Lua中呼叫C函式

lua利用乙個虛擬的堆疊來給c傳遞值或從c獲取值。每當lua呼叫c函式,都會獲得乙個新的堆疊,該堆疊初始包含所有的呼叫c函式所需要的引數值 lua傳給c函式的呼叫實參 並且c函式執行完畢後,會把返回值壓入這個棧 lua從中拿到c函式呼叫結果 1 typedef struct lua state lu...

C中呼叫Lua函式

我們先來看乙個簡單的例子 lua state l null 內部呼叫lua函式 double f double x,double y int main void functest.lua f function a,b return a b end 這其中最關鍵的是呼叫函式的使用,在c中呼叫lua函式...

呼叫Lua函式

翻譯自http gamedevgeek.com tutorials calling lua functions 呼叫lua函式 這是lua指令碼語言教程系列之二。在第一篇中,我們學習了在windows和linux下編譯並執行 hello,world 程式。如果你沒有看過,請參考lua入門一文。這篇文...