我刚刚将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
。
任何帮助或想法表示赞赏。
答案 0 :(得分:18)
科学记数法的语法是Scala是一个浮点数,后跟e
(或E
)和指数。您所看到的问题是浮点数的变化,并且与科学记数法的语法没有任何关系(尽管这确实会导致错误消息的混淆)
您可以通过启用-deprecation
开启2.10.4 REPL来确认这一点:
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中使用。