java - Scala - super 的中缀运算符不能称为中缀

标签 java scala

假设我有以下结构

trait A {
    def \ (v: String) = ...
    def + (v: String) = ...
}

case class B extends A {
    override def \ (v: String) = {
        // Do something here
        super \ v
    }
    override def + (v: String) = {
        // Do something here
        this + v
    }
}

super\v 处,我收到一条错误消息,提示 '.'预期但找到标识符 如果我使用点符号而不是中缀符号,则此代码可以工作,如下所示:super.\(v) 所以我的问题是:

为什么我不能将中缀运算符与 super 一起使用,但我可以将它们与 this 一起使用?

这是 scala 中的某种 Java 东西还是背后有一些思考过程?

最佳答案

来自http://scala-lang.org/files/archive/spec/2.11/06-expressions.html#this-and-super :

SimpleExpr  ::=  [id `.'] `this'
              |  [id '.'] `super' [ClassQualifier] `.' id

所以 super 本身并不是一个表达式,并且在 http://scala-lang.org/files/archive/spec/2.11/06-expressions.html#infix-operations可以看到,中缀运算的左操作数必须是一个表达式(更准确地说,是一个 PrefixExpr,其定义为 ['-' | '+' | '~ ' | '!'] SimpleExpr)。

关于java - Scala - super 的中缀运算符不能称为中缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952103/

相关文章:

regex - 使用正则表达式检测和转换字符串中的数字

scala - Spark : How can DataFrame be Dataset[Row] if DataFrame's have a schema

java - Scala 中的多值赋值行为

scala - sbt 服务器无法开始抛出错误 231

java - 在 xml 序列化期间将每个属性放在一个新行上

java - 在 Swing 中子类化 JPanel 的最佳方法

Java Web应用程序: How can I show system time generated at client side in the report

java - 为其他开发人员设计类以在 Java 中使用

java - JSON 数据放入scope.body 变量中

scala - 使用 Scala 隐式向库添加方法