中文呼叫<this>无法正常工作

时间:2015-08-31 07:48:30

标签: scala

为什么以下不起作用? 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
}

1 个答案:

答案 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"没有。