我正在查看一个教程,它位于http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4
这个教程是2008年1月发布的,但我使用的是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")
}
当输入这段代码到解释器中时,会产生以下错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException at scala.collection.LinearSeqOptimized$class.apply(LinearSeqOptimized.scala:53) at scala.collection.immutable.List.apply(List.scala:45)
还有其他185行的跟踪信息,然后解释器退出。
这个错误消息是什么意思?有谁能告诉我上面的代码有什么问题吗?
case _ => println("Invalid color")
,但这并没有帮助。也许我会尝试使用2.8.1版本,看看是否可能已经修复了这个错误或其他问题。 - JALclass A(val a: Int); case class AA(aa: Int) extends A(aa); AA(1) match { case AA(a) => a }
。如果你将分号替换为换行符,在REPL中它会失败。使用分号或在周围加上括号,它可以正常运行。 - Debilski