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

Passing a function to another function as statement

我想编写一个函数,如果给定一个偶数作为参数,它将 return 为真,否则为假。此外,编写一个函数来过滤数字列表 return 只包含偶数。全部使用 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"?

此致。

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

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

然后以新名称调用它。

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

请注意,现在 filterEven 不是您函数的好名称。传入的参数为filterFunc,将决定你过滤的是偶数,还是奇数,还是小于100,还是.....

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

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

这在功能上等同于:

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