非常简单的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
^
答案 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)
你必须留出空间让它工作