mad*_*ine 0 syntax scala identifier lexical-analysis
我只是在思考Scala的命名参数语法.我创建了下面运行的代码片段,它工作正常.但是,当我删除之间的空格a: =>Int时a:=>Int,它失败了.
这没有任何问题:
object Calculator extends App {
def sum(a: => Int) = (b: Int) => a + b
println(sum(4)(5))
}
Run Code Online (Sandbox Code Playgroud)
当我删除第2行中的空格时,以下内容失败并出现语法错误sum(a:=>Int):
object Calculator extends App {
def sum(a:=> Int) = (b: Int) => a + b
println(sum(4)(5))
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个代码片段不能编译?
在词法分析期间,它在第一阶段失败,因为:=>它是有效的Scala标识符:
val :=> = 42
println(:=>) // prints 42
Run Code Online (Sandbox Code Playgroud)
因此,你的代码
def sum(a:=> Int) = ??? // wrong: unexpected identifier `:=>`
Run Code Online (Sandbox Code Playgroud)
就像说的那样无效
def sum(a+= Int) = ??? // wrong: unexpected identifier `+=`
Run Code Online (Sandbox Code Playgroud)
要么
def sum(a:: Int) = ??? // wrong: unexpected identifier `::`
Run Code Online (Sandbox Code Playgroud)