Su 2.7.5.final, sto cercando di aggiungere un elenco di Iterable Ints in questo modoScala: overflow nonostante l'uso di Long quando si aggiunge
def sum(xs: Iterable[Int]): Long = {
var sum = 0L
xs.foreach((x) => sum = sum + x)
sum
}
println(sum(List(1, Integer.MAX_VALUE - 1)))
println(sum(Integer.MAX_VALUE - 1 to Integer.MAX_VALUE))
println(0L + Integer.MAX_VALUE - 1 + Integer.MAX_VALUE)
Quando corro, ho
2147483647
0
4294967293
E, si potrebbe dire "use reduceLeft (_ + _)", ma sembra essere in grado di restituire lo stesso tipo di elementi nell'elenco ... ma voglio accumularlo a Long, quindi non lo faccio t hanno problemi di overflow.
Aggiornamento 2009-10-28
Si tratta di un bug nella gamma, come sottolineato da Eastsun. È stato segnalato al team di Scala in ticket 2535
Hmm, println (somma (Lista (Integer.MAX_VALUE - 1, Integer.MAX_VALUE))) produce 4294967293. Questo ha qualcosa a che fare con il metodo 'a' ho il sospetto. Domanda interessante! –