Widziałem kilka przykładów kodu używającego symbolu „That” z Generics. Tj.
def map[B, That](f : (A) => B) : That
Ale z powodu braku możliwości wyszukiwania tego słowa w Google, nie mogę znaleźć żadnej dokumentacji dotyczącej tego, co robi i jak go używam.
Czy to zwykły symbol zastępczy zwykłego typu, czy robi coś specjalnego?
Odpowiedzi:
13 dla odpowiedzi nr 1Wszelkie identyfikatory w środku [...]
są traktowane jako parametry typu.
Więc w przypadku def map[B, That](f : (A) => B) : That
That
oznacza tylko ogólny typ zwrotu. Zamień na Z
na przykład: def map[B, Z](f : (A) => B) : Z
miałby dokładnie taki sam efekt.
3 dla odpowiedzi № 2
W tłumaczeniu na Javę byłoby to:
public <B, That> That map(f: Function1<A, B>)
Lub innymi słowy That
jest ogólnym (lub, w języku Scala lingo, parametrem typu).
3 dla odpowiedzi nr 3
Jest to „symbol zastępczy”, jak go nazywasz (to jest parametr typu); konwencją w bibliotece kolekcji jest użycie That
reprezentujący typ kolekcji, która zostanie utworzona. (W ten sposób przekształcasz się z this
do That
.)