2013-04-01 18 views
9

Sto leggendo Programming Scala in questo momento. Ho appena visto il capitolo sulla conversione del tipo implicito, in cui viene introdotto il simbolo <%. C'è anche un simbolo <: e un simbolo <.Scala Generics Tipo Vincoli

Qualcuno potrebbe riassumere i diversi vincoli di tipo? Ad esempio, sto lottando con la differenza tra <: e <. Sono curioso di sapere se ce ne sono altri che non ho ancora affrontato.

+0

Possibile duplicato di http://stackoverflow.com/questions/4465948/what-are-scala-context-and-view-bounds vedere anche http://stackoverflow.com/questions/3427345/what-do-and -mean-in-scala-2-8-and-where-are-they-documented –

+0

@ om-nom-nom Non sono interessato agli operatori indicati nel post che hai elencato. Mi interessavano gli operatori del vincolo di tipo: '<:', '<%', '>:', ecc. Sono completamente indipendenti. –

risposta

16

Non esiste alcun vincolo di tipo denominato <.

A <: B significa A è letteralmente un sottotipo di B (dove sottotipo è definito riflesso, il che significa per qualsiasi tipo T è il caso che T <: T).

A <% B significa A è o un sottotipo di B o v'è una conversione implicita da A ad un tipo distinto AA per cui AA <: B. Questo è chiamato "vista vincolata".

A >: B significa A è il supertipo B.

+0

Hai ragione, non esiste un vincolo '<'. Che dire del vincolo '>:'? –

+0

Ho appena iniziato a leggere il capitolo sull'implementazione di 'List'. Spiega che '>:' può essere usato per creare un 'List [Fruit]' quando si aggiunge un 'Orange' a un 'List [Apple]'. È un vincolo molto interessante. –

+0

Più precisamente: A <% B significa che v'è una conversione implicita da A ad un tipo AA distinto per cui AA <: B. Se A è un sottotipo di B, AA può essere lo stesso come A: L'identità la funzione (che è definita in Predef e sempre nell'ambito) può essere applicata al posto di una conversione effettiva. Ma anche se A è un sottotipo di B, potrebbe esserci una conversione implicita in un diverso tipo AA che ha la precedenza su Predef.identity(). In tal caso, il compilatore inferirebbe il tipo AA. Dipende dalla precarietà degli impliciti. –