Почему Scala 2.11.2 дает мне ошибку компиляции для числа с плавающей запятой в научной нотации?

Недавно я обновил проект Scala от 2.10 до 2.11.2.

Для следующего кода:

 if( x < 1.e-150 ) // conditional ops... 

Я получаю сообщение об ошибке

e не является членом Int

Раньше научное понятие работало нормально. Я подозреваю, что это не 2.11 вещь, а скорее какая-то странность с обновлением, которое в большинстве случаев было просто обновлением файла sbt:

scalaVersion := "2.11.2"

где он был ранее:

scalaVersion := "2.10.3"

Я не могу придумать, что может быть причиной этого. Все, что я знаю, это то, что он отлично работает под 2.10.

Кто-нибудь видел эту проблему раньше или может предложить исправить? (или новая линия запроса!)

Я использую JDK 1.7.0_21 и sbt.version=0.13.5.

Любая помощь или идеи оцениваются.

Ответ 1

Синтаксис для научной нотации Scala - это число с плавающей запятой, за которым следует e (или e) и показатель экспоненты. Проблема, которую вы видите, - это изменение того, что считается числом с плавающей запятой, и не имеет ничего общего с синтаксисом для научной нотации (хотя это и способствует запутыванию сообщения об ошибке).

Вы можете подтвердить это, включив 2.10.4 REPL при включенном -deprecation:

scala> val x = 1.
<console>:1: 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.
       val x = 1.
               ^

И, конечно, в 2.11 это просто не будет компилироваться вообще.

Вы можете сделать то же самое, написав либо 1e-150, либо 1.0e-150, оба из которых будут работать либо в 2.10, либо в версии 2.11.