Scala函数,意外行为

时间:2017-06-07 08:24:08

标签: scala list loops

我有以下Scala代码段:

(1 to 10).foreach(a => (1 to 100 by 3).toList.count(b => b % a == 0))

,我希望表现如下:

  • 创建一个3个小于100的多个列表
  • 对于先前生成的列表中的每个项目,计算有多少1,2,3 ... 10的倍数

但是,当我运行代码片段时,我得到一个空列表。我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

使用foreach时,完全可以预期这种行为。

foreach将一个过程 - 一个结果类型为Unit的函数 - 作为右操作数。它只是将过程应用于每个List元素。操作的结果再次是Unit;没有汇总结果列表。

它通常用于副作用 - 比如打印或保存到数据库等等。

您应该使用map代替:

scala> (1 to 10).map(a => (1 to 100 by 3).toList.count(b => b % a == 0))
// res3: scala.collection.immutable.IndexedSeq[Int] = Vector(34, 17, 0, 9, 7, 0, 5, 4, 0, 4)