Scala函数=>作为参数

iam*_*myr 5 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)
Run Code Online (Sandbox Code Playgroud)

不等于

    def map(s: Set, f: Int => Int): Set = x => exists(s, f(x))
Run Code Online (Sandbox Code Playgroud)

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

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

Tza*_*har 10

exists的第二个参数的类型为Int => Boolean(右?),换句话说,它从期望的功能IntBoolean.现在,f(x)不符合那种类型 - 它有类型Int.所以 - y => f(y) == x创建一个具有正确类型的函数,如果其输入等于,则返回true x.

如果多余的字符给你带来了麻烦 - 你也可以使用匿名参数 '_' 来缩短它:

def map(s: Set, f: Int => Int): Set = x => exists(s, f(_) == x)
Run Code Online (Sandbox Code Playgroud)