Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Derived Scala case class with same member variables as base

Tags:

scala

Is there a nicer way of doing this?

scala> case class A(x : Int)
defined class A

scala> case class B(override val x : Int, y : Int) extends A(x)
defined class B

I'm extending A with B and adding an extra member variable. It would be nice not to have to write override val before the x.

like image 375
David Avatar asked Jan 13 '10 17:01

David


1 Answers

I would strongly advise not to inherit from a case class. It has surprising effects on equals and hashCode, and has been deprecated in Scala 2.8.

Instead, define x in a trait or an abstract class.

scala> trait A { val x: Int }
defined trait A

scala> case class B(val x: Int, y: Int) extends A
defined class B

http://www.scala-lang.org/node/3289

http://www.scala-lang.org/node/1582

like image 64
retronym Avatar answered Oct 20 '22 04:10

retronym