1,高階函數
Scala支持:
1,函數是第一等公民
1,把函數做爲實參傳遞給另外一個函數
2,把函數作爲返回值返回
3,把函數賦值給變量
4,把函數存儲在數據結構中
在Scala中,函數就像普通變量一樣,同樣也具有函數的類型。
2,函數類型
函數類型的格式爲A => B,表示一個接受類型A的參數,並返回類型B的函數
例:Int => String 是把整型映射爲字符串的函數類型
3,高階函數
用函數作爲形參或者返回值的函數,稱爲高階函數。
例如:
4,匿名函數
匿名函數就是函數常量,也稱爲函數文字量,定義格式爲
(形參列表)=> {函數體}
5,柯里化
柯里化函數把具有多個參數的函數轉化爲一條函數鏈,每個節點上是單一參數。
例子:以下兩個add函數是等價的
Def add(x: Int, y:Int)=x+y
Def add(x: Int,)( y:Int)=x+y //scala裏柯里化的語法
應用例子:
可以看到,在函數式編程中,我們可以基於一些通用性的函數,利用偏應用函數柯里化這些技術來定義構造新的函數,而不需要重新構造定義一些新的函數出來,這就是函數式編程的魅力所在。
6,Scala遞歸與尾遞歸
1,遞歸函數
遞歸函數在函數式編程中是實現循環的一種技術(函數式編程沒有循環語句,通過遞歸實現)。
例子:
遞歸層數深會導致堆棧溢出,可對遞歸進行優化,即尾遞歸。
7,尾歸遞
尾遞歸函數中所有遞歸形式的調用都出現在函數的末尾。
當編譯器檢測到一個函數調用是尾遞歸時,它就覆蓋當前的活動記錄而不是在棧中去創建一個新的。可避免堆棧溢出。
8,綜合性例子求