Scala点语法(或缺少语法)

java syntax scala

2514 观看

3回复

10090 作者的声誉

当我遇到一段对我来说毫无意义的代码时,我正在阅读一本精彩的《Scala编程》一书:

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

注意第2行和第3行:

val this1 = this widen that.width 

看来我应该可以用:

val this1 = this.widen that.width

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

错误:“;” 预期但'。' 找到了。
val this1 = this.widen that.width ^

为什么此语法不可接受?

作者: Zack Marrapese 的来源 发布者: 2009 年 8 月 5 日

回应 (3)


3

28560 作者的声誉

我没有尝试过,但是也许可以用: val this1 = this.widen(that.width)

widen可能是采用一个参数(加上this引用)的方法,此类方法可以像第一个示例代码中的运算符一样使用。

作者: Jörn Horstmann 发布者: 05.08.2009 01:43

17

11893 作者的声誉

决定

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

val this1 = this.widen(that.width)

发生错误是因为省略了括号,只有在使用运算符表示法的情况下才可以这样做。例如,您不能这样做:

"a".+ "b" // error: ';' expected but string literal found.

相反,你应该写

"a".+ ("b")

实际上,您可以使用整数来执行此操作,但这超出了此问题的范围。

阅读更多:

作者: André Laszlo 发布者: 05.08.2009 02:18

2

261783 作者的声誉

使用点时,将使用点样式进行方法调用。否则,您将使用运算符样式。尽管可以为不同的调用混合使用两种语法,但是不能为同一方法调用混合两种语法-例如,that.width在widen的运算符样式调用中用作参数。

请参阅我可以在Scala中省略哪些字符?什么时候可以省略括号,点,花括号,=(函数)等的确切规则?

作者: Daniel C. Sobral 发布者: 05.08.2009 05:08
32x32