2012-10-24 8 views
9

Moja interpretacja _._1 jest:Co _._ 1 i _ ++ _ oznaczają w Scali (dwie oddzielne operacje)?

_ = wieloznaczny parametr _1 = pierwszy parametr w metodzie liście parametrów ale gdy są używane razem z . co to oznacza?

ten sposób jego zastosowanie:

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

W tym stwierdzeniem:

_++_ 

gubię. Czy w jakiś sposób łączy dwa parametry wieloznaczne? ten sposób jego zastosowanie:

.reduce(_++_) 

byłbym szczególnie zainteresowany, gdyby mogli Powyższy kod być bardziej gadatliwy i usunąć wszelkie implicits, tak więc mogę zrozumieć to lepiej?

Odpowiedz

10

_._1 wywołuje metodę _1 na parametrze wieloznacznym _, który pobiera pierwszy element krotki. Tak więc, sortWith(_._1 < _._1) sortuje listę krotek według ich pierwszego elementu.

_++_ wywołuje metodę ++ dla pierwszego parametru wieloznacznego z drugim parametrem jako argumentem. ++ powoduje konkatenację sekwencji. Tak więc .reduce(_++_) łączy listę sekwencji razem. Zwykle można do tego użyć flatten.

5

_1 to nazwa metody. W szczególności krotki mają metodę o nazwie _1, która zwraca pierwszy element krotki. Tak więc _._1 < _._1 oznacza "wywołaj metodę _1 dla obu argumentów i sprawdź, czy pierwsza jest mniejsza od drugiej".

I tak, _++_ łączy oba argumenty (zakładając, że pierwszy argument ma metodę ++, która wykonuje konkatenację).

3
.reduce(_++_) 

jest naprawdę:

.reduce{ (acc, n) => acC++ n } 
Powiązane problemy