2011-10-11 3 views
5

Dans le code suivant, je reçois une erreur de compilation indiquant que j'ai une incompatibilité de type sur 'x':Auto-unboxing Scala modèle match

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

Comment puis-je obtenir Scala à l'auto-Unbox someRef dans la déclaration de match?

Répondre

11

Le système de type ne connaît pas la boxe à ce niveau. Mais il sait que s'il y a un Any, un Long en boîte est vraiment (vraisemblablement) censé être juste un Long (de la partie AnyVal de l'arbre d'héritage de classe). Donc:

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

C'est fait. Merci. – Ralph