2012-10-31 20 views
5

Próbuję napisać metodę odwrotną w Scali, która pobiera listę i zwraca odwrotność. Mam:Błąd niedopasowania typu scala w pętli for

object Reverse { 
    def reverseList(list: List[Int]): List[Int] = { 
    var reversed: List[Int] = List() 
    for (i <- list) { 
     reversed = i :: reversed 
    } 
    } 
    def main(args: Array[String]) { 
    println(reverseList(List(1,2,3,4))) 
    } 
} 

Ale gdy próbuję skompilować, otrzymuję:

example.scala:4: error: type mismatch; 
found : Unit 
required: List[Int] 
    for (val i <- list) { 
      ^

"Lista" Lista została uznana być typu List [Int]. Dlaczego jest rozpoznawany jako typ jednostki?

+2

jej nie narzekali, że lista jest z niewłaściwego typu, ale wypowiedzi na zwroty typu jednostki kiedy Lista powrót os [Int] Oczekuje – Arjan

+0

Czy to dla domowa/ćwiczenia? W przeciwnym razie możesz po prostu użyć metody 'odwrotnej' 'Seq' – drexin

Odpowiedz

4

Dodaj reversed po pętli for. W Scali ostatnia linia w funkcji jest wartością zwracaną. The for (i <- list){...} zwraca Unit.

object Reverse { 
    def reverseList(list: List[Int]): List[Int] = { 
    var reversed: List[Int] = List() 
    for (i <- list) { 
     reversed = i :: reversed 
    } 
    reversed 
    } 
    def main(args: Array[String]) { 
    println(reverseList(List(1,2,3,4))) 
    } 
} 
+0

Dzięki, że całkowicie to naprawiłem. Nadal nie rozumiem, dlaczego dostaję błąd typu niedopasowanie typu. Czy lista zmiennych nie powinna zostać rozpoznana, tak jak została zadeklarowana? – user1789874

+0

spójrz na mój komentarz – Arjan

+0

Niezgodność typów jest spowodowana tym, że funkcja 'reverseList' oczekuje na typ zwrotny' List [Int] ', ale' Unit' jest zwracany przez wyrażenie 'for'. Dodanie 'odwróconego' jako ostatniej linii w zmianach powoduje zwrócenie typu zwracanego z' Jednostki' do 'Lista [Int]' i błędu niezgodności typu. – Brian