scala:
(1 to 100000000).toList.foldLeft(0)((acc, x) => acc + x)
长生不老药:
1..100000000 |> Enum.to_list |> List.foldl(0, fn x, acc -> x + acc end)
它们具有相同的功能。但是,JVM只是抛出GC异常,而BEAM可以安全地处理它。我很好奇为什么JVM无法处理这种情况?是JVM还是Scala编译器的问题? (我知道我可以使用Stream或View来处理这种情况)
答案 0 :(得分:2)
我不知道Elixir如何处理此操作,但是toList
将创建一个包含100000000个条目的真实List对象。如果您跳过这一步,该操作也将在Scala中成功完成:
scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712