2017-08-14 86 views
1

我是Scala的新手,並嘗試探索更多功能方法。 我寫了一個方法,並這樣定義一個變量: -具有'Val'和'Def'的高階函數

val list = 1 to 10 toList 

def getFilterList(list: List[Int],f:Int => Boolean): List[Int] = { 
    list.filter(f) 
} 

getFilterList(list, x => x %2 ==0) 

val oddHOF :Int => Boolean = value => value % 2 == 0 

list.filter(oddHOF) 

現在,我的問題是,既oddHOFgetFilterList是高階函數如果沒有,那麼什麼oddHOFgetFilterList被稱爲?

回答

1

A Higher ordered function是一個以函數爲參數的函數。因此,getFilterList是一個更高級的函數,因爲它將Int => Boolean類型的函數作爲參數。

另一方面,oddHOFFirst class function,這意味着您可以在函數文字語法中表達函數。例如val oddHOF: Int => Boolean = (value:Int) => value % 2 == 0。這裏,函數的類型是Int => Boolean,即,其採用Int類型的一個參數並且返回boolean值,並且(value:Int) => value % 2 == 0function literal

+0

除了'getFilterList'是一個方法,不是函數(但也許這是一個不必要的頭髮分裂)。 – jwvh

+0

@jwvh函數和方法究竟有什麼區別? –

+1

@AkashSethi,這是一個非常混亂的話題。詳細討論[這裏](https://stackoverflow.com/questions/2529184/difference-between-method-and-function-in-scala)和[這裏](https://stackoverflow.com/questions/4839537/功能-VS-方法合階)。 – jwvh