Scala:尽管在添加时使用了Long,但仍会溢出
发布时间:2020-12-16 18:33:22 所属栏目:安全 来源:网络整理
导读:在2.7.5.final,我试图添加一个Intrable Int这样的列表 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))pri
在2.7.5.final,我试图添加一个Intrable Int这样的列表
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) 当我跑步时,我明白了 2147483647 0 4294967293 并且,您可能会说“使用reduceLeft(_ _)”,但它似乎只能返回与列表中的元素相同的类型…但我想累积到Long,所以我没有溢出的问题. 更新2009-10-28 正如Eastsun所指出的,这是Range中的一个错误.它已于ticket 2535向Scala团队报告 解决方法
这是Range的一个错误.
有一个Range的foreach方法的源代码: override def foreach(f: Int => Unit) { if (step > 0) { var i = this.start *val until = if (inInterval(end)) end + 1 else end* //bug here!!! while (i < until) { f(i) i += step } } else { var i = this.start val until = if (inInterval(end)) end - 1 else end while (i > until) { f(i) i += step } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |