一、函數(shù)
在lua中函數(shù)的調(diào)用方式和C語言基本相同。 如print(“hello world”), z=add(x+y)。唯一的差別是,如果函數(shù)只有一個參數(shù),并且該參數(shù)是字符串或者table構(gòu)造器,那么圓括號可以省略,如print “hello world”, f{x=10,y=10}。
我對于table構(gòu)造器的理解就是它本身就是一個構(gòu)造函數(shù)或者是特殊化的結(jié)構(gòu)體。
lua為面向?qū)ο笠蔡峁┝艘粋€新的特殊語法--冒號操作符。表達(dá)式o.foo(o,x) 的另一種寫法是o:foo(x)。
在以上聲明中,包含了函數(shù)名(add),參數(shù)列表(a),以及函數(shù)體。需要說明的是,Lua中實參和形參的數(shù)量可以不一致,一旦出現(xiàn)這種情況,Lua的處理規(guī)則等同于多重賦值,即實參多于形參,多出的部分被忽略,如果相反,沒有被初始化的形參的缺省值為nil。
1、多重返回值
print(maximum( {1,5,2,7,3,6} ))
--輸出 4 7
2、變長參數(shù)
lua中同一個函數(shù)可以接受不同數(shù)量的參數(shù)(參數(shù)項為 ... )
function mul(a,b,...)
sum=a*b
for i,v in pairs{...} do
sum=sum*v
end
return sum
end
print(add(1,2,3,4,5))
print(add(1,2,3))
print(mul(1,2,3,4,5))
3、具名實參
lua中允許將多個參數(shù)合并在一個table中,當(dāng)做一個參數(shù)傳入
二、深入函數(shù)
在lua中函數(shù)和其他所有值一樣是匿名的,即它們沒有名稱,我們在操作的時候都在在操作該函數(shù)的變量。
如
foo=function(x) return 2*x end
1、closure函數(shù)(閉包函數(shù))
如果一個函數(shù)寫入另一個函數(shù)內(nèi),那么這個處于內(nèi)部的函數(shù)可以訪問外部函數(shù)的局部變量。
為了加深理解,再來看一個例子
power2=power(2) --power2,power3為閉包變量
power3=power(3)
print(power2(4))
print(power3(5))
--輸出
--16
--125
2、非全局函數(shù)
Lib={
add=function(x,y) return x+y end
sub=function(x,y) return x-y end
}
do
local f=function(x,y) return x+y end
...
f(4,5)
end
新聞熱點
疑難解答
圖片精選