2013-02-13 13 views
6

Ho visto diversi esempi di codice usando il simbolo "That" con Generics. vale a direCosa significa "That" in Scala

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

Ma, a causa della mancanza di google-capacità di questa parola, non riesco a trovare alcuna documentazione su ciò che fa e come lo uso.

È semplicemente un normale segnaposto o fa qualcosa di speciale?

+3

è un segnaposto - sì –

risposta

13

Qualsiasi identificatore all'interno di [...] viene considerato come parametri tipo.

Quindi nel caso di def map[B, That](f : (A) => B) : ThatThat indica solo un tipo di reso generico. Sostituirlo con Z ad esempio: def map[B, Z](f : (A) => B) : Z avrebbe lo stesso effetto.

3

Traducendo a Java, che sarebbe:

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

O, in altre parole, That è un generico (o, in gergo Scala, un parametro di tipo).

3

È un "segnaposto" come lo chiami (ovvero un parametro di tipo); la convenzione nella libreria delle collezioni è quella di utilizzare That per rappresentare il tipo di raccolta che verrà creata. (Quindi, trasformi da this a That.)

+0

Definirlo un "segnaposto" è nel migliore dei casi fuorviante. È un parametro di tipo formale, proprio come i nomi di argomenti "regolari" (valore) nelle definizioni del metodo sono parametri formali. È la contropartita a livello di codice di un argomento di un metodo. –

+0

@RandallSchulz - In effetti, ma questo è ciò che l'OP ha chiamato. Ho modificato la mia risposta per dire di cosa si tratta e suggerisco che "segnaposto" non è il termine tecnicamente corretto. –