Автоматическая распаковка в Scala - PullRequest
6 голосов
/ 11 октября 2011

В следующем коде я получаю сообщение об ошибке компиляции о том, что у меня есть несоответствие типов для 'x':

val someRef: java.lang.Long = 42L
someRef match {
  case x: Long => println("The answer: " + x)
  case _ => println("Unknown")
}

Как заставить Scala автоматически распаковать someRef в операторе match?

1 Ответ

12 голосов
/ 11 октября 2011

Система типов не знает о боксе на этом уровне.Но он знает, что если Any, то Long в штучной упаковке действительно (предположительно) должен быть просто Long (из AnyVal части дерева наследования классов).Итак:

val someRef: java.lang.Long = 42L
(someRef: Any) match {
  case x : Long => println("The answer is " + x)
  case _ => println("What answer?")
}
...