lua函式有沒有辦法獲得呼叫自身的檔案的路徑

2021-03-03 21:50:05 字數 3094 閱讀 1014

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週歲,按...