Lua函式呼叫報錯

2021-10-07 16:48:54 字數 1640 閱讀 6843

之前的專案開發中有聽到同事提及過有一種寫法函式在呼叫時會報錯,今天在看書的過程中又看到了,記錄下來:

local funa = function(n)

if n == 0 then

return 1

else

return n+funa(n-1)

endendprint(funa(5))

例如上面的**,我們想求1+2+3+...+n的和,定義了乙個函式funa,在funa遞迴呼叫自己。

我們執行是會發現報錯。

lua: functiontest.lua:5: attempt to call global 'funa' (a nil value)
funa是個nil值,也就是我們沒有定義。

這是因為lua我們的區域性函式funa還沒有定義完,因此我們想要呼叫那麼就是個nil,如果這是有個全域性的函式funa,那麼他會呼叫全域性的那個funa。而非我們想要呼叫的區域性函式funa,如下:

function funa(n)

print("我是全域性的funa")

return 1

endlocal funa = function(n)

if n == 0 then

return 1

else

return n+funa(n-1)

endendprint(funa(5))

輸出:[[--

我是全域性的funa

6[finished in 0.0s]

--]]

對於這個問題我們可以先定義乙個區域性變數,然後在定義行數本身。如下:

function funb(n)

print("我是全域性的funb")

return 1

endlocal funb

funb = function(n)

if n == 0 then

return 0

else

return n+funb(n-1)

endendprint(funb(5))

輸出:[[--

15[finished in 0.0s]

--]]

現在函式funb中呼叫的就是區域性函式funb了。即使在函式定義的時候,這個區域性變數的值還有完成定義,但之後函式執行的時候,funb就已經有了正確的值了。

其實通常我們在寫過的過程中我們是這樣寫的:

function func(n)

print("我是全域性的func")

return 1

endlocal function func(n)

if n == 0 then

return 0

else

return n+func(n-1)

endendprint(func(5))

輸出:[[--

15[finished in 0.0s]

--]]

這樣寫在lua內部也會把其展開成:

local func

func = function() --todo end

pow 函式呼叫報錯解決

在編寫程式時,使用中的 pow 引數使用不明確,顯示如下 1 miulate.cpp 106 error c2668 pow 對過載函式的呼叫不明確原因 因為pw 函式有三種使用過載方法,vs工具,對語法檢查更為嚴格,double pow double x,int y float pow float...

呼叫報錯 呼叫HMS SDK介面報錯6003

整合華為hms sdk的遊戲或普通應用,呼叫介面 比如getcurrentplayer登入介面 總是報錯6003。該錯誤碼官方文件表示 簽名證書指紋錯誤,簽名證書指紋主要用於校驗應用的真實性,確保應用來自可信 針對此問題,可以從以下4點排查 開啟應用的apk,將其中 meta inf 資料夾解壓出來...

van dialog 元件呼叫 報錯

如果需要在彈窗內嵌入元件或其他自定義內容,可以使用元件呼叫的方式 dialog v model show title 標題 show cancel button export default 按照逛網 這樣寫,結果 報錯。不能正常使用。這麼費事?原因 自己不細心導致!首先 使用元件呼叫,那 一定要引...