Na 2.7.5.final, jestem próbuje dodać Iterable listę Ints jak takScala: Przepełnienie mimo stosowania długich podczas dodawania
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)
Kiedy biegnę, mam
2147483647
0
4294967293
Można też powiedzieć "use reduceLeft (_ + _)", ale wydaje się, że można zwrócić tylko ten sam typ, co elementy na liście ... ale chcę akumulować na Long, więc nie mogę " • mają problemy z przepełnieniem.
Aktualizacja 2009-10-28
Jest to błąd w zasięgu, jak podkreślił Eastsun. Został zgłoszony zespołowi Scala pod numerem ticket 2535
Hmm, println (suma (List (Integer.MAX_VALUE - 1, Integer.MAX_VALUE))) daje 4294967293. To ma coś wspólnego z metodą 'na' ja podejrzanego. Interesujące pytanie! –