2012-02-25 22 views
63

ho trovato il seguente frammento di codice:Qual è la parola chiave forSome in Scala per?

List[T] forSome { type T } 

Il forSome si presenta come un metodo, ma il mio amico mi ha detto che è una parola chiave.

L'ho cercato su google, ma ho trovato pochi documenti su forSome. Che cosa significa e dove posso ottenere alcuni documenti a riguardo?

risposta

43

La parola chiave forSome viene utilizzata per definire tipi esistenziali in Scala. C'è questa pagina di Scala glossary che spiega cosa sono. Non sono riuscito a trovare un posto nei documenti Scala spiegandoli in dettaglio, quindi here è un articolo sul blog che ho trovato su Google che spiega come sono utili.

Aggiornamento: è possibile trovare una definizione precisa dei tipi esistenziali nello Scala specification ma è piuttosto denso.

Per riepilogare alcuni dei post a cui mi sono collegato, i tipi esistenziali sono utili quando si desidera operare su qualcosa ma non si preoccupano dei dettagli del tipo in esso contenuto. Ad esempio, si vuole operare su array, ma non si cura che tipo di matrice:

def printFirst(x : Array[T] forSome {type T}) = println(x(0)) 

che si potrebbe anche fare con una variabile di tipo sul metodo:

def printFirst[T](x : Array[T]) = println(x(0)) 

ma si potrebbe non voler aggiungere la variabile type in alcuni casi. È inoltre possibile aggiungere un balzo alla variabile tipo:

def addToFirst(x : Array[T] forSome {type T <: Integer}) = x(0) + 1 

vedere anche this blog post che è dove ho ottenuto questo esempio da.

+0

@JanekBogucki Il collegamento sopra riportato non funziona. – jpcooper

+0

http://www.scala-lang.org/news/roadmap-next.html - "forSome syntax is deleted." –

+0

forSome è previsto per la rimozione nella versione "Don Giovanni": https://www.scala-lang.org/news/roadmap-next.html –

3

Non conosco Scala, ma la tua domanda ha sollevato il mio interesse e ho iniziato a usare Google.

ho trovato che in Scala's changelog:.

"E 'ora possibile definire tipi esistenziali utilizzando la nuova parola chiave forSome Un tipo esistenziale ha la forma T forSome {Q} dove Q è una sequenza di valore e/o tipo dichiarazioni. "

+5

Alcune informazioni possono essere trovate anche in [Scala Spec] (http://www.scala-lang.org/docu/files/ScalaReference.pdf), sulla 26a pagina –

+1

specifiche attuali: http: //www.scala -lang.org/files/archive/spec/2.11/03-types.html#existential-types –

Problemi correlati