使用中缀方法时需要括号吗?

时间:2013-01-17 09:55:33

标签: scala infix-notation

非常简单的Scala问题。

对于1 + 2的中缀方法怎么不需要括号?

scala>1 + 2
res7: Int = 3

但是点式方法呢?

scala>1 .+(2)
res8: Int = 3

scala> 1 .+2
<console>:1: error: ';' expected but integer literal found.
   1 .+2
       ^

2 个答案:

答案 0 :(得分:3)

Scala中的所有内容都是一个对象,因此1 .+(2)表示使用参数+调用对象1上的方法2。当然,如果你调用这样的方法,你需要将参数括在括号中,就像常规的obj.somemethod(someparam,foo,bar)一样。

中缀表示法(1 + 2)实际上意味着同样的事情(用一个参数调用方法是语法糖)。

需要dot之前的空格,以便将dot解释为方法调用而不是小数分隔符。否则,1.+(2)1.+2将被解释为1.0 + 2

答案 1 :(得分:2)

我认为这与语言定义有关:

  

左关联二元运算e1 op e2被解释为e1.op(e2)。

http://www.scala-lang.org/docu/files/ScalaReference.pdf

表单1 + 2未在任何地方指定,所以我的猜测是编译器正在寻找1 + 2或1。+(2)。事实上,编译器通常将1 + 2转换为1。+(2)。使用时。它需要一个函数而不是中缀语法。

底线:你可以使用其中一半而不是中途。

PD:有人评论说调用你需要使用它的方法如下:obj.somemethod(someparam,foo,bar)但是在这种情况下你也可以这样做:obj somemethod (someparam,foo,bar)你必须留出空间让它工作