大資料Scala系列之高階函數
1.1. 概念
如果一個函數的傳入參數為函數或者傳回值是函數,則該函數即為高階函數。
1.2. 傳入參數為函數
Scala中,函數是頭等公民,和數字一樣。不僅可以調用,還可以在變量中存放函數,也可以作為參數傳入函數,或者作為函數的傳回值。

1.3. 傳入參數為匿名函數
在Scala中,你不需要給每一個函數命名,就像不必給每個數字命名一樣,将函數賦給變量的函數叫做匿名函數
還可以
1.4. 傳入參數為方法(隐式轉換方法到函數)
在Scala中,方法和函數是不一樣的,最本質的差別是函數可以做為參數傳遞到方法中
case class WeeklyWeatherForecast(temperatures: Seq[Double]) {
private def convertCtoF(temp: Double) = temp * 1.8 + 32
//方法convertCtoF作為參數傳入
def forecastInFahrenheit: Seq[Double] = temperatures.map(convertCtoF)
}
1.5.傳回值為函數
//傳回值為函數類型:(String, String) => String
def urlBuilder(ssl: Boolean, domainName: String): (String, String) => String = {
val schema = if (ssl) "https://" else "http://"
(endpoint: String, query: String) => s"$schema$domainName/$endpoint?$query"
val domainName = "www.example.com"
def getURL = urlBuilder(ssl=true, domainName)
val endpoint = "users"
val query = "id=1"
val url = getURL(endpoint, query) // "https://www.example.com/users?id=1": String