【问题标题】:Scala - infix operator for super can't be called infixScala - super 的中缀运算符不能称为中缀
【发布时间】:2017-03-22 12:48:48
【问题描述】:

假设我有以下结构

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 东西,还是背后有一些思考过程?

【问题讨论】:

    标签: java scala


    【解决方案1】:

    来自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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2015-09-22
      • 1970-01-01
      • 2011-11-28
      • 2018-01-30
      • 2015-07-29
      相关资源
      最近更新 更多