Scala函数文字

use*_*957 7 scala literals

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

在以上Scala的两个函数文字中,当我调用第一个(例如:x(2,3))时,它没有返回总和。而是返回另一个结果,例如res0。当我调用res0(2,3)时,它返回了我的和。而第二个则在第一个调用中返回答案(例如:y(2,3)给我5)。

有人可以解释一下为什么第一个电话本身没有向我返回总和(即5)。

我在REPL中尝试过。

Mar*_*lic 9

这可能有助于写出完整的类型xy像现在这样

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

val y: (Int, Int) => Int = 
  (_: Int) + (_: Int)
Run Code Online (Sandbox Code Playgroud)

在这里,我们看到当x应用于两个参数时,它将返回另一个类型的函数

(Int, Int) => Int
Run Code Online (Sandbox Code Playgroud)

注意速记

(_: Int) + (_: Int)
Run Code Online (Sandbox Code Playgroud)

相当于

(a: Int, b: Int) => a + b
Run Code Online (Sandbox Code Playgroud)