在Lua 基本語法快速入門 中有涉及到函數的用法,但只是普通的應用,并沒有深成次的研究一下,介于函數用的還是比較多的就專門做個專題研究一下~
一、函數、變量的用法
函數的定義用關鍵字function 。然后加函數名和變量。注意后面沒有do。最后以end結束。
在函數中的變量默認是全局變量,但通常情況下函數中的變量都是在函數中有效的。所以要在聲明的時候加上"local” 標明只在局部有效。
二、返回多個結果值
在Lua中的函數可以返回多個返回值。這與C等語言有很大的不同。因為從根本上講Lua支持多賦值。
我猜測在內部運行時,多個返回值被封裝到了一個table中。然后在賦值時再按順序取出。
看這個示例:
function max(a) local mi = 1 local m = a[mi] for i,val in ipairs(a) do --其中i為順序位置,val為相應的值 print("i= "..i.."val="..val) if val >m then mi = i m = val end end return m,mi end print(max({8,10,23,12,5}))
這個函數的作用是返回一個數列中最大的值和下標。
在實際應用的過程中,在C中調用lua_pcall(L,0,2,0) 即可接受這兩個返回值入棧,然后通過 lua_tonumber(L,-1) 和 lua_tonumber(L,-2)即可
三、可變參數
Lua 函數可以接受可變數目的參數,和 C 語言類似在函數參數列表中使用三點(...)表示函數有可變的參數。
Lua 將函數的參數放在一個叫 arg 的表中,除了參數以外,arg表中還有一個域 n 表示參數的個數。
例如:
function myprint(...) local printResult = "" --如果不顯式聲明,程序會自動檢查全局的變量,會找不到出錯 print(arg.n) for i,v in ipairs(arg) do printResult = printResult..tostring(v)..'/t' end printResult=printResult..'/n' return printResult end print(myprint(2,4,6,'2es'))
|
新聞熱點
疑難解答