2012-10-31 17 views
5

Ich versuche, eine umgekehrte Methode in Scala, die eine Liste und kehrt das Gegenteil. Ich habe:Scala-Typ Mismatch-Fehler in For-Schleife

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))) 
    } 
} 

Aber wenn ich zu kompilieren versuchen, erhalte ich:

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

Die Liste „Liste“ erklärt wurde, vom Typ Liste sein [Int]. Warum wird es als Typ Einheit erkannt?

+2

seine nicht beschweren, dass die Liste von einem falschen Typ ist, sondern Ausdruck für die Rückkehr Einheit, wenn Rückgabetyp os Liste [Int] – Arjan

+0

erwartet wird, ist dies für eine Hausaufgabe/Übung? Andernfalls können Sie einfach die 'reverse' Methode von' Seq' verwenden. – drexin

Antwort

4

Fügen Sie nach der for-Schleife reversed hinzu. In Scala ist die letzte Zeile in einer Funktion der Rückgabewert. Die for (i <- list){...} gibt Unit zurück.

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

Danke, das hat es total behoben. Ich verstehe immer noch nicht, warum ich einen Typenkonfliktfehler bekommen habe. Sollte die Variablenliste noch nicht erkannt worden sein, so wie sie deklariert wurde? – user1789874

+0

schau dir meinen Kommentar an – Arjan

+0

Der Typ stimmt nicht überein, weil die 'reverseList' Funktion einen Rückgabetyp von' List [Int] 'erwartet, aber' Unit' wird tatsächlich vom 'for' Ausdruck zurückgegeben. Das Hinzufügen von "reversed" als letzte Zeile ändert den Rückgabetyp von 'Unit' in' List [Int] 'und der Typenkonfliktfehler ist behoben. – Brian