2014-12-15 22 views
5

Quando sono entrata in Seq(1,2,3) REPL, mi restituisce List(1,2,3)La differenza e la conversione tra Seq [Int] e List [Int] in scala?

scala> Seq(1,2,3) 
res8: Seq[Int] = List(1, 2, 3) 

Pertanto, ho pensato che il List(1,2,3) può essere di tipo List[Int]. E ho cercato di specificare il tipo per la variabile che sono assegnati a Seq(1,2,3), ma inaspettatamente, il REPL si lamenta così:

scala> val a:List[Int]=Seq(1,2,3) 
<console>:20: error: type mismatch; 
found : Seq[Int] 
required: List[Int] 
     val a:List[Int]=Seq(1,2,3) 

Qualcuno ha idee su ciò che Seq[Int] = List(1, 2, 3) dire? Non dovrebbe significare che Seq(1,2,3) restituisce una lista? Qual è la differenza tra Seq[Int] e List[Int]? E come convertire tra Seq e List?

+0

Possibile duplicato? http://stackoverflow.com/questions/10866639/scala-difference-between-a-seq-and-a-list – StuartLC

+0

@StuartLC Sì, ma non ha menzionato come convertire da 'Seq' a' List' o 'Lista' a' Seq' .. –

risposta

8

Seq è una caratteristica di base (interfaccia) per le sequenze e List è un'implementazione concreta di tale interfaccia.

Ogni istanza di List è già una Seq quindi non è necessario convertire nulla. È possibile utilizzare il metodo toSeq, ma non vedo alcun motivo per farlo. Per convertire Seq in un List utilizzare il metodo toList.

+0

Questo è ancora confuso, cioè 'Seq' può essere istanziato (o ha un costruttore), ma scavare le differenze di implementazione di una lista non è semplice. E l'istanziazione di un 'Seq' produce un' elenco' (almeno nel REPL). – matanster

+1

Chiedere un 'Seq' ha lo stesso significato di chiedere" un'auto ". Qualsiasi macchina E la fabbrica ti fa una bella Toyota - nel nostro caso un'istanza di 'List'. La tua richiesta è stata generica e la risposta è specifica. Se vuoi che la Toyota ti chieda direttamente, installa esplicitamente un 'List'. –

Problemi correlati