1樓:匿名使用者
你可以考慮用debug庫幫助你
for i,v in pairs(debug.getinfo(2)) do
print(i,v)
end但是我不是很推薦這個庫 這個庫的很多函式效率很低 而且破壞了域的概念
你應該通過許多其他途徑對這個函式進行維護
其中2表示當前棧的層次 因為你是兩重的函式呼叫,所以是上一層的函式呼叫相關的資訊,比如名字,函式 所在檔案 函式定義的行數等等
執行demo的時候要注意 這一段**不能拿去獨立執行 必須放在第二重巢狀的函式裡使用
lua 中的函式 如果獲取自己的名稱?
2樓:匿名使用者
可以獲得 但不推薦用 因為debug庫儘量少用的好function fun()
print(debug.getinfo(1).name)endfun()
debug庫的東西執行起來效率普遍不高 而且有風險再就是debug庫很多內容破壞了語法裡的local特性 導致可在外部看到區域性變數
3樓:匿名使用者
函式內部, 本身就在函式定義的地方, 應該是直接就知道自己的名字.
怎樣在lua指令碼中呼叫另一個lua指令碼中的函式呢???
4樓:匿名使用者
require「函式指令碼檔名字」
下面可以直接呼叫,也可以使用pcall方法安全呼叫
5樓:匿名使用者
除了樓上的回答,還可以這樣,dofile("b.lua") 然後就可以在a.lua指令碼中呼叫b.lua中的函式了。
6樓:匿名使用者
a.lua中require("b.lua"),即可呼叫b.lua中函式。
c呼叫lua檔案中函式
7樓:匿名使用者
在c中呼叫lua函式的api主要由以下幾個:
(1)void lua_call (lua_state *l, int nargs, int nresults);
函式呼叫,nargs表示引數的個數,nresults表示返回值的個數
首先將lua函式壓棧,然後將引數依次壓棧,最後呼叫函式即可
函式呼叫時,引數和函式都會pop出棧,呼叫返回後,結果會push進棧
nresults==lua_multret,所有的返回值都會push進棧
nresults!=lua_multret,返回值個數根據nresults來調整
lua語句:
a = f("how", t.x, 14)
在c中的實現:
lua_getglobal(l, "f"); // 函式入棧
lua_pushstring(l, "how"); // 引數1入棧
lua_getglobal(l, "t"); // 表t入棧
lua_getfield(l, -1, "x"); // 引數2入棧
lua_remove(l, -2); // 跳t出棧
lua_pushinteger(l, 14); // 引數3入棧
lua_call(l, 3, 1); // 呼叫函式,引數和函式都會出棧
lua_setglobal(l, "a"); // 給a賦值,棧頂出棧
上述**執行完畢後,堆疊狀態恢復原樣。
(2)int lua_pcall (lua_state *l, int nargs, int nresults, int msgh);
函式呼叫,在安全模式下,並且可以新增錯誤處理函式。
如果呼叫期間發生error,lua_pcall會捕獲之,然後push stack一個錯誤資訊(會先將函式和引數pop出棧),並且返回一個error code(非0的一個值)。
發生error時,如果指定了錯誤處理函式,會在error message入棧前呼叫錯誤處理函式,具體由msgh引數來決定:
(1)msgh==0,不指定錯誤處理函式,入棧資訊不變;
(2)msgh!=0,msgh表示錯誤處理函式的堆疊index,錯誤處理函式會以error message為引數,並將返回的新的error
message入棧。主要用來給error
message新增 更多的debug資訊,比如堆疊跟蹤,因為這些資訊在pcall呼叫完之後是收集不到的。
函式返回**:
lua_ok(0):呼叫成功
lua_errrun:runtime error
lua_errmem:記憶體分配錯誤,這種情況下不會呼叫錯誤處理函式
lua_errerr:呼叫錯誤處理函式時出錯,當然,不會再進一步呼叫錯誤處理函式
lua_errgcmm:呼叫metamethod.__gc時報錯,由gc引起,和函式本身沒關係
(3)int lua_pcallk (lua_state *l, int nargs, int nresults, int errfunc, int ctx, lua_cfunction k);
函式呼叫,在安全模式下,並且允許函式yield。
8樓:
你使用的是哪個lua 版本????
我用的是 lua 5.2 ,在 codeblock 下編譯的。
你的描述和源**不符合。
printf("%d \n",(int)lua_tonumber(m_pstate,1));
應該顯示 0 。
lua堆疊中
index 1 => add函式
index 2 => 1
index 3 => 2
所以那句**試圖把lua函式轉換成為數字。應該得到0 。
後面一句應該得到3 。
你說你的結果是 2 0 。應該不會。除非你貼出來的**,和實際編譯的**不同。
lua 函式呼叫
9樓:匿名使用者
這得看你這個 yeelink.init 怎麼處理啊
你這個函式是作為 yeelink.init 的第4個引數,那你得看你的 init() 裡怎麼對這個引數處理
有沒有辦法根治鼻炎
鼻炎 與型別相關,不同型別 方法各異。其分類包括感染性鼻炎和非感染性鼻炎。非感染性鼻炎,第一原則首先應規避過敏原,減少過敏原吸入,或減少在過敏原環境中暴露。亦可進行區域性 如口服抗過敏藥物或區域性進行鼻腔沖洗。感染性鼻炎為急性鼻炎,常見即感冒。首先應注意休息 適當多飲水 可使用中成藥控制鼻炎症狀。補...
這個函式有沒有被呼叫
被呼叫了。max是函式名,int a,int b這是引數列表。呼叫一個函式使用 函式名 實參列表。z max x,y 中的 x 和y就是實參列表。回答 呼叫了。z max x,y 這裡x和y是實際引數,z接收max函式的返回值。int max int a,int b 這裡a和b是形式引數。呼叫了c語...
車子超齡有沒有辦法做滴滴車,車超齡了,有沒有什麼辦法註冊滴滴?
天下無難事,只怕有心人 滴滴注冊超齡,提交不過 我只想說,超齡直接提交 通過不了的,辦法還會有。車齡超標無法加盟,請諒解。超齡車可以註冊,問題不大好解決 今年bai8月開始的駕齡du3年以上,車齡6年以內,行駛里程10萬公里以內,男性年zhi齡要求22 60週歲,女dao性年齡要求22 50週歲,按...