Сокращенные арифметические операторы возвращают разные результаты в Scala - например: 3 + 2 != 3.+(2)

Возможный дубликат:
странность оператора Scala

Я очень новичок в Scala, и я читал, что в этом языке все является объектом, круто. Кроме того, если метод имеет только 1 аргумент, мы можем опустить '.' и скобки '()', это нормально.

Итак, если мы возьмем следующий пример Scala: 3 + 2, '3' и '2' - это два объекта Int, а '+' - это метод, звучит нормально. Тогда 3 + 2 — это просто сокращение от 3.+(2), это выглядит очень странно, но я все равно понимаю.

Теперь сравним следующие блоки по коду на REPL:

scala> 3 + 2
res0: Int = 5

scala> 3.+(2)
res1: Double = 5.0

Что тут происходит? Почему явный синтаксис возвращает Double, а сокращенный возвращает Int??


person Marsellus Wallace    schedule 10.08.2012    source источник


Ответы (1)


3. это Double. Лексер добирается туда первым. Попробуйте (3).+(2).

person Rex Kerr    schedule 10.08.2012
comment
да, но обратите внимание, что если вы введете 3.+(2) в Scala 2.10, вы получите warning: This lexical syntax is deprecated. From scala 2.11, a dot will only be considered part of a number if it is immediately followed by a digit. - person Seth Tisue; 11.08.2012