2010-11-22 7 views
4

私はこのチュートリアルでは、1月からである http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4Scala:このパターンがIndexOutOfBoundsExceptionをスローするコードと一致するのはなぜですか?

で発見チュートリアルをチェックアウトしました。 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") 
} 

、それは "メイン" java.lang.IndexOutOfBoundsException scala.collection.LinearSeqOptimizedの$ class.applyのスレッドで

例外を生成します(LinearSeqOptimized.scala:53) scala.collection.immutable.List.apply(List.scala:45)

に185行のトレースを加え、インタープリタを終了します。

このエラーメッセージは何を意味し、誰かが上記のコードに何が間違っているか教えていただけますか?

+0

だから!ちょっと切り取って貼り付けると問題が "ケースヌル"であることがわかりますが、クラスColor Lineを使用するだけで、一致するケースnullのみがエラーになりません。私はなぜ、コンパイラのバグ以外の理由は考えていない。 2.8.1が出ている、それを試す価値があるかもしれない? –

+0

(私にとっては)スケーラにファイルとしてフィードされたときに動作しますが、それは吹き上がった対話型の行だけです –

+0

コンパイル済みファイルとしての作業についてのおかげでありがとうございます。私はそれが構文ではないと思う?以前私は通訳に異例の問題を抱えていました。私はそれもその行かもしれないと思っていました - それを 'case _ => println(" Invalid color ")'に変更しようとしましたが、これは私が本当に考えていたものですが、それは役に立たない。多分、私は2.8.1を試して、これが修正されたバグか何かを見てみましょう。 – JAL

答えて

3

このようなメッセージは常にバグです。具体的にはhttps://lampsvn.epfl.ch/trac/scala/ticket/4025

+0

ええ、REPL自体を抜け出す方法は、単なる構文以外の何かが間違っているように思えました。これをクリアしていただきありがとうございます。 – JAL

関連する問題