Matching sub-classes of case classes in Scala -
why fail compile (or work?):
  case class a(x: int)   class b extends a(5)    (new b) match {     case a(_) => println("found a")     case _ => println("something else happened?")   }   the compiler error is:
constructor cannot instantiated expected type;  found   : blevins.example.app.a  required: blevins.example.app.b   note compiles , runs expected:
  (new b) match {     case a: => println("found a")     case _ => println("something else happened?")   }   addendum
just reference, compiles , runs fine:
  class a(val x: int)   object {     def unapply(a: a) = some(a.x)   }   class b extends a(5)    (new b) match {     case a(i) => println("found a")     case _ => println("something else happened?")   }      
this works, @ least in 2.8:
scala>   case class a(x: int)                            defined class  scala>   class b extends a(5)                            defined class b  scala>   (new b: a) match {                                   |     case a(_) => println("found a")                    |     case _ => println("something else happened?")      |   }                                               found   i haven't found pointer particular bug causes original problem, ignore warnings case class inheritance @ own peril.
Comments
Post a Comment