Scala: Почему этот код совпадения с шаблоном вызывает исключение IndexOutOfBoundsException? - PullRequest
4 голосов
/ 23 ноября 2010

Я проверял учебник, найденный на http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4

Этот учебник от Яна.2008, я вижу, но я использую Scala 2.8.0, если это имеет значение.

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

При вводе этого в интерпретатор выдает

Исключение в потоке "main"java.lang.IndexOutOfBoundsException в scala.collection.LinearSeqOptimized $ class.apply (LinearSeqOptimized.scala: 53) в scala.collection.immutable.List.apply (List.scala: 45)

плюс еще 185 строктрассировки, и интерпретатор завершает работу.

Что означает это сообщение об ошибке, и может ли кто-нибудь сказать мне, что не так с кодом выше?

1 Ответ

3 голосов
/ 23 ноября 2010

Такое сообщение всегда является ошибкой. В частности https://lampsvn.epfl.ch/trac/scala/ticket/4025.

...