2012-10-24 7 views
9

Meine Interpretation _._1 ist:Was bedeuten _._ 1 und _ ++ _ in Scala (zwei getrennte Operationen)?

_ = Wildcard Parameter _1 = erste Parameter in der Methode Parameterliste Aber wenn sie mit . verwendet zusammen was bedeutet es bedeuten? Dies ist

wie seine verwendet:

.toList.sortWith(_._1 < _._1) 

Für diese Aussage:

_++_ 

ich bin verloren. Verkettung von zwei Wildcard-Parametern? Dies ist, wie seine verwendet:

.reduce(_++_) 

wäre ich besonders daran interessiert, wenn sie über Code ausführlicher gemacht werden könnte und alle implicits entfernen, nur so kann ich es besser verstehen?

Antwort

10

_._1 ruft die Methode _1 für den Platzhalterparameter _ auf, der das erste Element eines Tupels erhält. So sortiert sortWith(_._1 < _._1) die Tupelliste nach ihrem ersten Element.

_++_ ruft die Methode ++ für den ersten Platzhalterparameter mit dem zweiten Parameter als Argument auf. ++ tut Verkettung für Sequenzen. So verkettet .reduce(_++_) eine Liste von Sequenzen zusammen. Normalerweise können Sie flatten dafür verwenden.

5

_1 ist ein Methodenname. Speziell Tupel haben eine Methode namens _1, die das erste Element des Tupels zurückgibt. Also _._1 < _._1 bedeutet "Rufen Sie die Methode _1 für beide Argumente auf und prüfen Sie, ob die erste kleiner als die zweite ist".

Und ja, _++_ verkettet beide Argumente (unter der Annahme, dass das erste Argument eine ++-Methode hat, die Verkettung durchführt).

3
.reduce(_++_) 

ist eigentlich nur:

.reduce{ (acc, n) => acC++ n } 
Verwandte Themen