val list = List(4, 6, 7, 8, 9, 13, 14)
list.foreach(num ⇒ println(num * 4))
list should be()
我试图弄清楚它应该是什么但却没有得到答案。我认为它必须是空的或者像Java中的void函数,但我不知道Scala中的等效函数。
答案 0 :(得分:1)
Scala中的void等效项为Unit
,foreach
确实返回Unit。
def foreach(f: (A) ⇒ Unit): Unit
所以适当的(和无用的)测试将是这样的:
list should be(List(4, 6, 7, 8, 9, 13, 14))
另外考虑到即使它函数返回一些东西,你也没有捕获它,所以列表将保持不变。
如果要检索函数的结果,则应将其分配给另一个值,如下所示:(使用map
显示此内容):
val result = list.map(num ⇒ num * 4)
result should be(List(16, 24, 28, 32, 36, 52, 56))
答案 1 :(得分:0)
我不明白你对void函数的意思,但有一种方法来表示这样的空列表:
list should be List.empty[Int]
答案 2 :(得分:0)
java中的void表示没有返回值,scala中的Unit用于相同的目的。
当你执行list.foreach时,没有返回值并且列表没有被更改(或者返回值是Unit),而是将函数应用于每个成员并且丢弃返回值。
我想你正在寻找平面图。 list.flatmap(f)将对每个元素应用f,并假设从f返回的值是一个集合,然后将其展平。例如,如果list是(0,2,4)并且f返回一个列表,其中1重复了成员值,那么f将返回list(),list(1,1)和list(1,1,1,1)然后返回返回值将是list(1,1,1,1,1,1)
在这种情况下,只需返回list()以获得list()的总返回值。