2017-08-14 88 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