一、函數的定義:
def sum(num:Int):Int = {
num + 1
}
我們類比一下變量的定義,變量有類型和變量名。比如 var str:String = "func" ;
str爲變量名,String爲他的類型,"func"爲他得值。類比到函數上就是這樣:
sum爲函數名,
Int => Int 就爲函數的類型,
(num:Int) => {num + 1} 就是函數的值。有沒有發現這其實是一個匿名函數? (注意這個值的前半部分要加括號括起來)
總感覺這樣說不太生動,還是舉例子吧:
val s = (num:Int) => num + 1
print(s(5))
因爲Scala有類型自動推斷,我們將函數的"值"賦給變量s 就會自動推斷爲一個類型爲 Int => Int 的函數,我們可以通過調用它來證明這個結論。
二、高階函數
有了上邊的推斷我們來看一下簡單的高階函數:
def aa(f:(Int,Int)=>Int,a:Int,b:Int):Int={
return f(a,b)
}
我們有這樣一個函數,他的參數類型爲((Int,Int)=>Int, Int, Int),返回值爲Int,也就是說它的參數有三個,一個函數類型的參數,兩個Int類型的參數。接下來我們要使用他,爲了更好地說明函數的“值“這一概念,我們結合最開始定義的sum函數:
使用sum函數:
val num = 5
val i = sum(num)
val j = sum(5)
接下來我們再看aa函數的使用:
val i: Int = aa(fun,9,8)
val j: Int = aa((a:Int,b:Int) => {a+b},5,6)
fun函數:
def fun(a:Int, b: Int):Int={
return a+ b
}
aa的函數參數我們可以使用定義好的函數,也可以使用函數的“值”來使用,就和num 和 5一樣一個是定義好的變量,一個是“值”。