user51
user51

Reputation: 10163

scala algebraic datatypes get member values

I have defined below algebraic datatype in scala.

    sealed abstract class DeviceType(device : Option[Int])

    case object DeviceType {
    final case object Mobile extends DeviceType( device = Some(4) )
    final case object Tablet extends DeviceType ( device = Some(5) )
    final case object Desktop extends DeviceType( device = Some(2) )
    final case object TV extends DeviceType ( device = Some(3) )
    final case object Unknown extends DeviceType ( device = None )
    }

When I do DeviceType.Mobile.device, I get below error.

error: value device is not a member of object DeviceType.Mobile

How can I access the device member in the case objects in ADTs.

Upvotes: 0

Views: 29

Answers (1)

Gonzalo Guglielmo
Gonzalo Guglielmo

Reputation: 629

you need to add val modifier to device attribute in order to have the accessor.

sealed abstract class DeviceType(val device : Option[Int])

   case object DeviceType {
       final case object Mobile extends DeviceType( device = Some(4) )
       final case object Tablet extends DeviceType ( device = Some(5) )
       final case object Desktop extends DeviceType( device = Some(2) )
       final case object TV extends DeviceType ( device = Some(3) )
       final case object Unknown extends DeviceType ( device = None )
    }

Upvotes: 3

Related Questions