假设我有以下结构
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事物还是背后有一些思考过程?
答案 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
)。