假设我有以下结构
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/