函數型參數
函數中的參數,一般都是傳入資料型態。但在Python中,參數卻可以是另一個函數。這種將函數當成參數傳入,稱為高階函數。高階函數其是是數學的一個概念,比如 f(x)=x2 的導數為2x。也就是說導出的2x也是一個函數。
底下是Python的代碼,如果要測試,請在Pycharm裏編寫執行。
def c2f(t):#t是小數
return t*9/5+32
def f2c(t):#t是小數
return (t-32)*5/9
def temp(t, func):#t是小數,func是函數
return func(t)
if __name__=="__main__":
c=100
f=temp(c, c2f)
print(f'攝氏:{c}, 華氏:{f}')
f=212
c=temp(f, f2c)
print(f'華氏:{f}, 華氏:{c}')
“::” 運算子
Java不可以將函數當成參數傳入,但強大的kotlin卻可以。其實kotlin並不是徹底的改變其架構,而是使用了一個賤招~~利用 “::” 運算子將函數copy 新的一份,然後包裝成一個物件。此物件的型態為
(參數1, 參數2, ……) -> 返回值
底下的程式碼中,可以使用 val funObject : (Double)->Double = ::c2f,此物件有一個invoke()方法,此方法就是要開始執行 c2f 函數,而invoke裏的參數,就是要傳入c2f 的參數。如下所示。
fun main(args:Array<String>){
val funObject:(Double)->Double = ::c2f
println(funObject.invoke(100.0))
}
fun c2f(t:Double):Double{
return t*9/5+32
}
因為kotlin可以自動判斷型別,所以可以寫成
