2010-11-22 9 views
4

ich ein Tutorial Check-out, bei http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4Scala: Warum wirft dieser Muster-Match-Code eine IndexOutOfBoundsException?

Dieses Tutorial ist von Januar gefunden. 2008, ich sehe, aber ich benutze Scala 2.8.0, wenn das einen Unterschied macht.

class Color(val red:Int, val green:Int, val blue:Int) 

case class Red(r:Int) extends Color(r, 0, 0) 
case class Green(g:Int) extends Color(0, g, 0) 
case class Blue(b:Int) extends Color(0, 0, b) 

def printColor(c:Color) = c match { 
    case Red(v) => println("Red: " + v) 
    case Green(v) => println("Green: " + v) 
    case Blue(v) => println("Blue: " + v) 

    case col:Color => { 
    print("R: " + col.red + ", ") 
    print("G: " + col.green + ", ") 
    println("B: " + col.blue) 
    } 

    case null => println("Invalid color") 
} 

Wenn diese in den Interpreter eintritt, es produziert

Exception in thread "main" java.lang.IndexOutOfBoundsException bei scala.collection.LinearSeqOptimized $ class.apply (LinearSeqOptimized.scala: 53) at scala.collection.immutable.List.apply (List.scala: 45)

plus weitere 185 Zeilen der Ablaufverfolgung, und der Interpreter beendet.

Was bedeutet diese Fehlermeldung, und kann mir jemand sagen, was mit dem obigen Code falsch ist?

+0

So ist es! Ein wenig Ausschneiden und Einfügen zeigt das Problem ist die "Fall Null" - aber nur die Verwendung der Klasse Color-Zeile und nur die Groß-/Kleinschreibung Null in der Übereinstimmung ist kein Fehler. Ich habe keine Ahnung warum, außer einem Compiler Bug. 2.8.1 ist out, könnte es wert sein, damit zu versuchen? –

+0

Und (für mich) es funktioniert, wenn scala als Datei gefüttert wird, ist es nur die interaktive Zeile für Zeile, die –

+0

explodiert Danke für die Bestätigung über die Arbeit als eine kompilierte Datei. Ich denke, es ist dann nicht die Syntax? Ich hatte vorher schon andere Probleme mit dem Dolmetscher. Ich dachte, es könnte auch diese Zeile sein - ich habe versucht, sie in 'case _ => println (" Ungültige Farbe ") zu ändern. Das war alles, woran ich wirklich denken konnte, aber das hilft nicht. Vielleicht versuche ich 2.8.1 und sehe, ob das vielleicht ein Bug ist, der behoben wurde, oder so. – JAL

Antwort

Verwandte Themen