Scala函数=>作为参数

时间:2016-06-29 09:19:23

标签: scala

有人可以向我解释为什么以下

  /**
   * Returns a set transformed by applying `f` to each element of `s`.
   */
    def map(s: Set, f: Int => Int): Set = x => exists(s, y => f(y) == x)

不等于

    def map(s: Set, f: Int => Int): Set = x => exists(s, f(x))

其中"存在"是一个函数,它返回s(第一个参数)中是否存在满足p(第二个参数)的有界整数。

为什么需要指定" y => f(y)== x"?万分感谢!

1 个答案:

答案 0 :(得分:10)

exists的第二个参数的类型为Int => Boolean(对吗?),换句话说,它需要一个从IntBoolean的函数。现在,f(x)并不符合该类型 - 它的类型为Int。所以 - y => f(y) == x创建一个具有正确类型的函数,如果其输入等于x,则返回true。

如果多余的字符让你感到烦恼 - 你也可以使用匿名参数' _'

来缩短它。
def map(s: Set, f: Int => Int): Set = x => exists(s, f(_) == x)