Scala点语法(或缺少)

Zac*_*ese 9 java syntax scala

当我遇到一段对我来说没有意义的代码时,我正在阅读精彩的" Scala编程"一书:

def above(that: Element): Element = {
    val this1 = this widen that.width
    val that1 = that widen this.width
    elem(this1.contents ++ that1.contents)
}
Run Code Online (Sandbox Code Playgroud)

注意第2和第3行:

val this1 = this widen that.width 
Run Code Online (Sandbox Code Playgroud)

似乎我应该能够用以下内容替换它:

val this1 = this.widen that.width
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译此更改时,它会给出以下错误:

错误:';' 预期,但'.' 找到.
val this1 = this.widen that.width ^

为什么这种语法不可接受?

And*_*zlo 17

第2行使用该方法widen作为运算符,而不是将其用作Java方法中的方法:

val this1 = this.widen(that.width)
Run Code Online (Sandbox Code Playgroud)

发生错误的原因是您省略了括号,只有在运算符表示法中使用方法时才能执行此操作.例如,你不能这样做:

"a".+ "b" // error: ';' expected but string literal found.
Run Code Online (Sandbox Code Playgroud)

相反,你应该写

"a".+ ("b")
Run Code Online (Sandbox Code Playgroud)

实际上你可以用整数做到这一点,但这超出了这个问题的范围.

阅读更多: