Scala高阶函数可以过滤偶数

时间:2014-09-16 09:21:18

标签: scala

我对Scala相对较新,并且已经在网上浏览了一些教程。我目前正在学习高阶函数,并且遇到了这个例子:

val filter = (predicate: Int => Boolean, xs: List[Int]) => {
  for (x <- xs if predicate(x)) yield x
}

该函数甚至可以过滤列表中的值..但我无法确定函数调用的参数。

我还有另外一个问题:

  • 有人可以解释一下:predicate: Int => Boolean参数在做什么吗?
  • 如果我这样做了怎么办:predicate: Int => Boolean => Boolean

我对链接模式如何工作以及如何有效地利用其功能感到有点困惑...谢谢

1 个答案:

答案 0 :(得分:3)

实际上,该功能甚至不会从列表中过滤掉值。它是一个更通用的函数,它根据您传递给它的谓词函数执行过滤。签名

val filter = (predicate : Int => Boolean, xs: List[Int]) => ...

告诉您filter是一个函数,它将两个值作为参数:

  • 论据predicate本身就是IntBoolean
  • 的功能区
  • 参数xsList的{​​{1}}

你可以传入一个函数来检查一个数字是否甚至是你的谓词:

Int