Scala 函数式文字

Scala functional literals

  1. val x = (x:Int, y:Int) => (_:Int) + (_:Int)
  2. val y = (_:Int) + (_:Int)

在 Scala 的上述两个函数文字中,当我调用第一个(例如:x(2,3))时,它不是 return 求和。相反,它 return 是另一个结果,比如 res0。当我调用 res0(2,3) 时,它 return 我就是总和。而第二个,return 是第一个电话的答案(比如:y(2,3) 给我 5)。

有人可以解释一下为什么第一个没有 return 我在第一个调用本身中的总和(即 5)。

我在 REPL 中试过了。

像这样写出 xy 的完整类型可能会有所帮助

val x: (Int, Int) => (Int, Int) => Int = 
  (a: Int, b: Int) => (_: Int) + (_: Int)

val y: (Int, Int) => Int = 
  (_: Int) + (_: Int)

这里我们看到当 x 应用于两个参数时它 returns 又是一个

类型的函数
(Int, Int) => Int

注意 shorthand

(_: Int) + (_: Int)

等同于

(a: Int, b: Int) => a + b
val x = (x:Int, y:Int) => (_:Int) + (_:Int)

相当于

val x = (x : Int, y : Int) => ((arg1:Int, arg2:Int) => (arg1:Int) + (arg1:Int))

同时

val y = (_:Int) + (_:Int)

相当于

(x:Int, y:Int) => (x:Int) + (x:Int)