2014-12-15 17 views
5

Kiedy wejście Seq(1,2,3) w REPL, zwraca mi List(1,2,3)Różnica i konwersja między Seq [Int] i List [Int] w scala?

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

Dlatego pomyślałem, że może być List(1,2,3) typu List[Int]. I starałem się określić typ dla zmiennej, która jest przypisana do Seq(1,2,3), ale niespodziewanie REPL narzeka tak:

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) 

Czy ktoś ma pomysły, co Seq[Int] = List(1, 2, 3) oznacza? Czy nie powinno to oznaczać, że Seq(1,2,3) zwraca listę? Jaka jest różnica między Seq[Int] i List[Int]? A jak przekonwertować między Seq i List?

+0

Możliwy duplikat? http://stackoverflow.com/questions/10866639/scala-difference-between-a-seq-and-a-list – StuartLC

+0

@StuartLC Tak, ale nie wspomniano, jak przekonwertować z 'Seq' na' List' lub 'List' na' Seq' .. –

Odpowiedz

8

Seq to podstawowa cecha (interfejs) dla sekwencji i List jest konkretną implementacją tego interfejsu.

Każde wystąpienie List jest już Seq, więc nie trzeba niczego konwertować. Możesz użyć metody toSeq, ale nie widzę żadnego powodu, aby to zrobić. Aby przekonwertować Seq na metodę List użyj metody toList.

+0

To wciąż jest mylące, tzn. 'Seq' może być tworzone (lub ma konstruktora), ale wykrywanie różnic implementacji listy nie jest proste. I tworzenie wystąpienia "Seq" daje "List" (w REPL co najmniej). – matanster

+1

Pytanie o "Seq" ma takie samo znaczenie, jak pytanie o "samochód". Każdy samochód. A fabryka dostanie fajną Toyotę - w naszym przypadku instancję 'List'. Twoja prośba była ogólna, a odpowiedź jest specyficzna. Jeśli chcesz, Toyota prosi o to bezpośrednio - jawnie instatiate 'List'. –

Powiązane problemy