2013-02-13 20 views
6

Widziałem kilka przykładów kodu używając symbolu "To" z Generics. tjCo oznacza symbol "To" w Scali?

def map[B, That](f : (A) => B) : That 

Jednak, ze względu na brak zdolności Google tego słowa, nie mogę znaleźć żadnej dokumentacji na to, co robi i jak go używać.

Czy jest to zwykły symbol zastępczy, czy robi coś specjalnego?

+3

to symbol zastępczy - tak –

Odpowiedz

13

Wszelkie dane identyfikacyjne wewnątrz [...] są traktowane jako parametry typu.

Tak więc w przypadku def map[B, That](f : (A) => B) : ThatThat oznacza tylko ogólny typ zwrotu. Zastąp go na przykład: Z, na przykład: def map[B, Z](f : (A) => B) : Z będzie miał dokładnie taki sam efekt.

3

Przełożenie Java, że ​​byłoby:

public <B, That> That map(f: Function1<A, B>) 

Albo, innymi słowy, That jest ogólnym (lub, w żargonie Scala, parametr typ).

3

Jest to "element zastępczy", jak go nazwiesz (to znaczy parametr typu); Konwencja w bibliotece kolekcji ma używać That do reprezentowania typu kolekcji, która zostanie utworzona. (W ten sposób przekształcasz z this na That.)

+0

Nazywanie go "symbolem zastępczym" jest w najlepszym wypadku mylące. Jest to formalny parametr typu, tak jak "zwykłe" (wartościowe) nazwy argumentów w definicjach metod są parametrami formalnymi. Jest to odpowiednik typu na poziomie argumentu metody. –

+0

@RandallSchulz - Rzeczywiście, ale tak nazwał to PO. Zmodyfikowałem swoją odpowiedź, aby powiedzieć, co to jest i zasugeruję, że "symbol zastępczy" nie jest poprawnym technicznie terminem. –