Ich mache eine Trainingsübung in Scala und bekomme diesen Val-Reassignment-Fehler. Ich sehe nicht, wo ich einem Wert einen neuen Wert zuweisen werde
%Vor%und ich erhalte diesen Fehler
%Vor% b
Dies ist der Name eines Parameters für Ihre Schließung ist ein val
, das nicht neu zugeordnet werden kann.
foldLeft
funktioniert, indem der Rückgabewert eines Aufrufs des Abschlusses als Parameter b
an den nächsten übergeben wird. Sie müssen also nur b + (p.name->p.emailAddresses)
zurückgeben. (Vergessen Sie nicht die Klammern für den Vorrang.)
Sie weisen val b
im Ausdruck b+=p.name->p.emailAddresses
neu zu.
Immutable Map
hat keine +=
-Methode. In diesem Fall übersetzt der Compiler b += p.name -> p.emailAddresses
in b = b + p.name->p.emailAddresses
. Da haben Sie es, Neuzuweisung!
Wie bereits erwähnt, stammt die Fehlermeldung vom Ausdruck ...b+=bp.name...
Aber wirklich, du musst hier gar kein FoldLeft machen, ein einfaches Mapping sollte genug sein. Jede Seq[K->V]
kann dann über die Methode Map[K,V]
in eine toMap
konvertiert werden.
In etwa so:
Haftungsausschluss: nicht auf Tippfehler usw. getestet.
%Vor%Tags und Links scala scala-collections