Scala:为什么这个模式匹配抛出IndexOutOfBoundsException的代码?

时间:2010-11-22 21:27:00

标签: exception scala pattern-matching

我正在查看一个教程,发现于 http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4

本教程来自jan。 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 个答案:

答案 0 :(得分:3)

这样的消息总是一个bug。具体来说是https://lampsvn.epfl.ch/trac/scala/ticket/4025