为什么 Scala By-Name 参数语法在删除 : 和 => 之间的 space 时失败

Why Scala By-Name parameter syntax fails when removing space between : and =>

我只是对 Scala 的命名参数语法有疑问。我创建了下面的 运行 代码片段,它工作正常。 但是,当我删除 a: =>Inta:=>Int 之间的 Space 时,它失败了。

运行没有任何问题:

object Calculator extends App {
  def sum(a: => Int) = (b: Int) => a + b
  println(sum(4)(5))
}

当我在 sum(a:=>Int) 的第 2 行删除 space 时,以下内容因语法错误而失败:

object Calculator extends App {
  def sum(a:=> Int) = (b: Int) => a + b
  println(sum(4)(5))
}

为什么第二个代码片段无法编译?

它在词法分析的第一阶段就失败了,因为 :=> 是一个有效的 Scala 标识符:

val :=> = 42
println(:=>)  // prints 42

因此,您的代码

def sum(a:=> Int) = ??? // wrong: unexpected identifier `:=>`

一样无效
def sum(a+= Int) = ??? // wrong: unexpected identifier `+=`

def sum(a:: Int) = ??? // wrong: unexpected identifier `::`