Scala 中缀呼叫开启<;这>;不起作用

Scala 中缀呼叫开启<;这>;不起作用,scala,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 } 正如@sjrd所述,foo“

为什么下面的方法不起作用?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
}

正如@sjrd所述,
foo“42”
不是中缀呼叫。在中缀调用中,运算符必须在两个对象之间进行中缀。i、 e.具有以下格式:

<object1> <operator> <object2>
<operator> <object>
在Scala中,前缀调用仅限于
+
-
~
根据:

前缀操作op;e由前缀运算符op组成,它必须是标识符“+”、“-”、“!”之一或“~”。表达式op;e相当于后缀方法应用程序e.unary_op


这就是为什么
这个foo“42”
可以工作,但是
foo“42”
不能工作。

如果您编写它
foo“42”
,它不是中缀调用。这将是一个前缀调用,除了Scala没有前缀调用(除了
一元数\-
和其他3个)。明白。用Scala编写DSL很好,但对“中缀”的严格要求让它有点难。基本上,DSL“表达式”始终是obj链(中缀参数)*(后缀)。最好还可以链接后缀操作。