一、函數
在lua中函數的調用方式和C語言基本相同。 如print(“hello world”), z=add(x+y)。唯一的差別是,如果函數只有一個參數,并且該參數是字符串或者table構造器,那么圓括號可以省略,如print “hello world”, f{x=10,y=10}。
我對于table構造器的理解就是它本身就是一個構造函數或者是特殊化的結構體。
lua為面向對象也提供了一個新的特殊語法--冒號操作符。表達式o.foo(o,x) 的另一種寫法是o:foo(x)。
在以上聲明中,包含了函數名(add),參數列表(a),以及函數體。需要說明的是,Lua中實參和形參的數量可以不一致,一旦出現這種情況,Lua的處理規則等同于多重賦值,即實參多于形參,多出的部分被忽略,如果相反,沒有被初始化的形參的缺省值為nil。
1、多重返回值
print(maximum( {1,5,2,7,3,6} ))
--輸出 4 7
2、變長參數
lua中同一個函數可以接受不同數量的參數(參數項為 ... )
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中允許將多個參數合并在一個table中,當做一個參數傳入
二、深入函數
在lua中函數和其他所有值一樣是匿名的,即它們沒有名稱,我們在操作的時候都在在操作該函數的變量。
如
foo=function(x) return 2*x end
1、closure函數(閉包函數)
如果一個函數寫入另一個函數內,那么這個處于內部的函數可以訪問外部函數的局部變量。
為了加深理解,再來看一個例子
power2=power(2) --power2,power3為閉包變量
power3=power(3)
print(power2(4))
print(power3(5))
--輸出
--16
--125
2、非全局函數
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
新聞熱點
疑難解答