在Lua 基本語法快速入門 中有涉及到函數(shù)的用法,但只是普通的應(yīng)用,并沒有深成次的研究一下,介于函數(shù)用的還是比較多的就專門做個專題研究一下~
一、函數(shù)、變量的用法
函數(shù)的定義用關(guān)鍵字function 。然后加函數(shù)名和變量。注意后面沒有do。最后以end結(jié)束。
在函數(shù)中的變量默認(rèn)是全局變量,但通常情況下函數(shù)中的變量都是在函數(shù)中有效的。所以要在聲明的時候加上"local” 標(biāo)明只在局部有效。
二、返回多個結(jié)果值
在Lua中的函數(shù)可以返回多個返回值。這與C等語言有很大的不同。因為從根本上講Lua支持多賦值。
我猜測在內(nèi)部運(yùn)行時,多個返回值被封裝到了一個table中。然后在賦值時再按順序取出。
看這個示例:
function max(a)
local mi = 1
local m = a[mi]
for i,val in ipairs(a) do --其中i為順序位置,val為相應(yīng)的值
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}))
這個函數(shù)的作用是返回一個數(shù)列中最大的值和下標(biāo)。
在實際應(yīng)用的過程中,在C中調(diào)用lua_pcall(L,0,2,0) 即可接受這兩個返回值入棧,然后通過 lua_tonumber(L,-1) 和 lua_tonumber(L,-2)即可
三、可變參數(shù)
Lua 函數(shù)可以接受可變數(shù)目的參數(shù),和 C 語言類似在函數(shù)參數(shù)列表中使用三點(diǎn)(...)表示函數(shù)有可變的參數(shù)。
Lua 將函數(shù)的參數(shù)放在一個叫 arg 的表中,除了參數(shù)以外,arg表中還有一個域 n 表示參數(shù)的個數(shù)。
例如:
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'))