2017-09-25 5 views
0

Neu bei scala und wundern, warum der Unterstrich in der letzten Zeile darunter nicht funktioniert, während die 'for' Schleifensyntax in Zeile 3 gut funktioniert. BTW Leaf ist eine Fallklasse und kann akzeptieren (Char, Int) zum Anwenden/Konstruieren. Danke!Warum funktioniert der Unterstrich hier nicht?

val chars: (List[Char]) = List('a', 'b') 
    var leaves: ListBuffer[Leaf] = ListBuffer() 

    for (c <- chars) leaves.append(Leaf(c, 1))//ok 
    leaves.foreach(leaves.append(Leaf(_, 1)))//COMPILE ERROR 
+2

Willkommen bei SO! Bitte [bearbeiten] Sie Ihre Frage und fügen Sie die Definition von 'Leaf' und die * exact * Fehlermeldung hinzu, die Sie erhalten. –

Antwort

4

Die Regeln der _ Notation sind so, dass Leaf(_, 1) zu x => Leaf(x, 1) äquivalent ist, so leaves.foreach(leaves.append(Leaf(_, 1))) zu leaves.foreach(leaves.append(x => Leaf(x, 1))) entspricht. Dies ist ein Fehler, weil leaves.append keine Funktion übernimmt und auch, weil foreach tut.

Was Sie wollen, ist leaves.foreach(x => leaves.append(Leaf(x, 1))), die foreach eine Funktion gibt. Allerdings würde ich erwarten, dass dies immer noch nicht funktionieren würde, da x den Typ Leaf hätte und ich würde erwarten, dass Sie ein Blatt nicht um ein anderes Blatt wickeln können.

Verwandte Themen