将函数作为语句传递给另一个函数

时间:2018-01-03 04:26:27

标签: scala functional-programming user-defined-functions scala-collections

我想编写一个函数,如果将偶数作为参数给出,则返回true,否则返回false。另外,编写一个函数来过滤只返回偶数的数字列表。全部使用Scala函数编程完成。这就是我所拥有的:

def isEven(n:Int): Boolean = n % 2 == 0
    println(isEven(4))

val filterEven  =  ( xs :List[Int] )  => {
    for(  x <- xs;   if x % 2 == 0  )  yield x
}
println(filterEven(List(3,2,4,5,6,22,91)))

我的问题是,如何将第一个函数“isEven”传递给“filterEven”函数以替换“if-statement”?

问候。

2 个答案:

答案 0 :(得分:1)

首先,在传入时给它起一个名字。

val filterEven = (xs :List[Int], filterFunc: Int => Boolean)  => {

然后以新名称调用它。

  for(x <- xs; if filterFunc(x)) yield x

请注意,现在filterEven不是您的功能的好名称。以filterFunc传入的参数将决定您是否过滤偶数,或奇数,或小于100,或......

答案 1 :(得分:1)

您可以将isEven作为参数传递给xs.filter

def filterEven(xs: List[Int]) = xs.filter(isEven)

这在功能上等同于:

def filterEven(xs: List[Int]) = for { x <- xs if isEven(x) } yield x