1 + 1 が意外に難しい

「Daimon.scala 第21回 (Scala School 斜め読み1)」 : ATNDでの一幕


1 + 1 = 2
ですね。

scala> 1 + 1
res0: Int = 2


ところで、Scala では演算子は実はメソッドです。
A method B は A.method(B) です。


なので
1 + 1 は 1.+(1)
と書けるはず。

scala> 1.+(1)
res1: Double = 2.0


あれ、さっきと結果が違う...

理由

1.+(1)
が 「1 の + を呼ぶ」のではなく「1. の + を呼ぶ」と解釈されるみたい。

scala> 1.
res2: Double = 1.0

scala> 1..+(1)
res3: Double = 2.0

scala> (1).+(1)
res4: Int = 2

scala> (1.)+(1)
res5: Double = 2.0