为什么 Scala By-Name 参数语法在删除 : 和 => 之间的 space 时失败
Why Scala By-Name parameter syntax fails when removing space between : and =>
我只是对 Scala 的命名参数语法有疑问。我创建了下面的 运行 代码片段,它工作正常。
但是,当我删除 a: =>Int
到 a:=>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 `::`
我只是对 Scala 的命名参数语法有疑问。我创建了下面的 运行 代码片段,它工作正常。
但是,当我删除 a: =>Int
到 a:=>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 `::`