2017-12-20 7 views
1
val list = List(4, 6, 7, 8, 9, 13, 14) 
list.foreach(num ⇒ println(num * 4)) 
list should be() 

Ich habe versucht, herauszufinden, was es sein sollte, aber nicht ganz die Antwort bekommen. Ich denke, dass es in Java leer oder wie eine Void-Funktion sein muss, aber ich kenne das Äquivalent in Scala nicht. enter image description hereVoid-Funktion entspricht in Scala?

+3

scala hat 'Unit', was gleichbedeutend mit Void in Java ist. Z.B. 'def doSomething: Unit = println (" foo ")'. Ihre Frage nicht klar, was Sie versuchen zu tun. Ihre Liste wäre immer noch "List (4, 6, 7, 8, 9, 13, 14)" in Ihrem Beispiel. Glauben Sie, dass 'foreach' Elemente bei Iteration isst? Es tut nicht. – prayagupd

+0

Gibt der Text im Screenshot nicht die Antwort auf Ihre Frage? Es besagt, dass ein Rückgabetyp von "Unit" in Scala dem Rückgabewert "void" in Java entspricht. –

+0

Was sind diese Klammern um Int? Es sollte List.empty [Int] sein und nicht List.empty (Int) – sparkr

Antwort

0

Ich verstehe nicht, was Sie unter Leere Funktion bedeuten, aber es gibt eine Möglichkeit, leere Liste wie folgt darstellen:

list should be List.empty[Int] 
1

Leere Äquivalent in Scala Unit wäre, tut foreach Einheit zurückzukehren.

list should be(List(4, 6, 7, 8, 9, 13, 14)) 

auch berücksichtigen, dass es auch die Funktion etwas zurückgibt, Sie erfassen es nicht so wird die Liste unverändert bleiben:

def foreach(f: (A) ⇒ Unit): Unit 

Also der richtige (und nutzloser) -Test wird dies.

Wenn Sie das Ergebnis einer Funktion abrufen möchten Sie es auf einen anderen Wert zuweisen sollte, so etwas wie dies unter: (map Mit dieser zeigen):

val result = list.map(num ⇒ num * 4) 
result should be(List(16, 24, 28, 32, 36, 52, 56)) 
0

Lücke in Java bedeutet, dass es keine Rückkehr gibt Wert, Einheit in der Skala dient demselben Zweck.

Wenn Sie list.foreach ausführen, gibt es keinen Rückgabewert und die Liste wird nicht geändert (oder der Rückgabewert ist Unit), stattdessen wird die Funktion auf jedes Mitglied angewendet und der Rückgabewert wird verworfen.

Ich kann mir vorstellen, dass Sie stattdessen eine Flatmap erstellen möchten. list.flatmap (f) würde f auf jedes Element anwenden und annehmen, dass der Rückgabewert von f eine Sammlung ist, und sie dann abflachen. Wenn zum Beispiel list (0, 2, 4) ist und f eine Liste zurückgibt, in der 1 den Elementwert wiederholt, dann würde f Liste(), Liste (1,1) und Liste (1, 1, 1, 1) zurückgeben zurückgegebener Wert wäre list (1,1,1,1,1,1)

In diesem Fall geben Sie einfach list() zurück, um einen Gesamtrückgabewert von list() zu erhalten.