为什么以下不起作用? Scala是否在表达式的开头禁止对作用域方法进行中缀调用?
class Foo {
def foo(x: String) = 1
}
class Bar extends Foo {
val bar1 = foo("42") // compiles
val bar2 = this foo "42" // compiles
val bar3 = foo "42" // does not compile
}
答案 0 :(得分:2)
如@sjrd所述,foo "42"
不是中缀调用。在中缀调用中,操作符必须在两个对象之间插入。即具有以下形式:
<object1> <operator> <object2>
foo "42"
是前缀调用。即具有以下形式:
<operator> <object>
在Scala中,根据SLS,前缀调用仅限于+
,-
,!
或~
:
前缀操作op; e由前缀运算符op组成,前缀运算符op必须是标识符'+',' - ','!'或'〜'之一。表达式op; e等同于后缀方法应用程序e.unary_op。
这就是this foo "42"
有效的原因,但foo "42"
没有。