天天看點

大資料Scala系列之高階函數

大資料Scala系列之高階函數

1.1. 概念

如果一個函數的傳入參數為函數或者傳回值是函數,則該函數即為高階函數。

1.2. 傳入參數為函數

Scala中,函數是頭等公民,和數字一樣。不僅可以調用,還可以在變量中存放函數,也可以作為參數傳入函數,或者作為函數的傳回值。

大資料Scala系列之高階函數

1.3. 傳入參數為匿名函數

在Scala中,你不需要給每一個函數命名,就像不必給每個數字命名一樣,将函數賦給變量的函數叫做匿名函數

大資料Scala系列之高階函數

還可以

大資料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

繼續閱讀