나는 이 튜토리얼 1월에서입니다 http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-4스칼라 :이 패턴이 IndexOutOfBoundsException을 던지는 코드와 일치하는 이유는 무엇입니까?
에서 발견 튜토리얼을 체크 아웃했다. 2008, 나도 알지만, 스칼라 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 행의 추적을 더하고 인터프리터를 종료합니다.
이 오류 메시지의 의미는 무엇이며, 위의 코드가 잘못된 점은 누구에게 말해 줄 수 있습니까?
그렇습니다! 조금 잘라내어 붙여 넣기를하면 문제가 "case null"이라는 것을 알 수 있습니다. 단, Color 클래스 클래스를 사용하면 일치하는 경우 null 만 오류가되지 않습니다. 왜 컴파일러 버그가 아닌지 모르겠다. 2.8.1이 나오면 시도해 볼 가치가 있습니까? –
그리고 (나를 위해) 그것은 scala에 파일로 공급 될 때 작동합니다. 이는 단지 한 줄에 하나씩 대화식입니다. –
컴파일 된 파일로 작업하는 것에 대해 확인해 주셔서 감사합니다. 구문이 아닌 것 같아요? 나는 전에 통역사와 함께 다른 이상한 문제를 겪었다. 나는 그 라인일지도 모른다고 생각했다. 나는 그것을 case = => println ("Invalid color")'로 바꾸려고 노력했다. 그것은 정말로 내가 생각할 수있는 전부지만, 도움이되지 않는다. 아마 2.8.1을 시험해보고 이것이 아마도 수정 된 버그인지 아닌지를 알아볼 것입니다. – JAL