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

时间:2017-03-22 12:48:49

标签: 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我收到错误消息'.' expected but identifier found 如果我使用点符号而不是像这样的中缀,则此代码有效:super.\(v) 所以我的问题是:

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

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

1 个答案:

答案 0 :(得分:4)

来自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你可以看到中缀操作的左手操作数必须是一个表达式(更确切地说,是{{1} },定义为PrefixExpr)。