2014-09-12 42 views
10

Kısa bir süre önce Scala projesini 2.10'dan 2.11.2'ye güncelledik. Aşağıdaki kodu içinScala 2.11.2 neden bilimsel gösterimdeki kayan nokta sayısı için derleme hatası veriyor?

:

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

Ben hatayı

e alıyorum Int

Daha önce bilimsel kavram Tamam çalıştı bir üyesi değildir. Bunun için bir 2.11 şey ama çoğunlukla oldu yükseltme sbt dosyasını güncelleme sadece bir olgu ile daha olası bir tuhaflık değil şüpheli: daha önce oldu

scalaVersion := "2.11.2" 

:

scalaVersion := "2.10.3" 

Buna neyin neden olabileceğini düşünemiyorum. Tek bildiğim, 2.10'un altında iyi çalışıyor olması.

Bu sorunu daha önce görmüş veya düzeltmeyi öneren var mı? (veya yeni sorgulama hattı!)

JDK 1.7.0_21 ve sbt.version=0.13.5 kullanıyorum.

Herhangi bir yardım veya fikir takdir edildi.

cevap

18

Bilimsel gösterimin sözdizimi Scala, kayan nokta sayısı e (veya E) ve üssüdür. Gördüğünüz sorun, bir kayan nokta sayısı olarak sayılan bir değişikliktir ve bilimsel gösterimin sözdizimiyle (hata mesajının karışıklığına katkıda bulunsa da) doğru bir şey yapmaz.

Sen -deprecation açık bir 2.10.4 REPL kadar ateş ederek bu onaylayabilirsiniz:

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. 
      ^

Ve tabii, 2.11 bu sadece hiç derlemek olmaz.

Tam olarak aynı şeyi, her ikisi de 2.10 veya 2.11'de çalışacak olan 1e-150 veya 1.0e-150 yazarak gerçekleştirebilirsiniz.

+0

Mükemmel cevap. Çok teşekkür ederim :) – ZenMasterZed

+0

Bir çift için 16 oy, veya ... Travis için 16 oy? –

+0

@ som-snytt: Bu bir kopya mı? "Travis için oy" ise, ayrıca [dün gece benim Shapeless sorusu] için daha fazla ilgi istiyorum (http://stackoverflow.com/q/25923974/334519). –

İlgili konular