I am fairly new to Scala but have encountered a sort of a coding pattern from the code I've seen so far. Here is an example of what I am talking about:
object TicketSeller {
def props(event: String) = Props(new TicketSeller(event))
case class Add(tickets: Vector[Ticket])
case class Buy(tickets: Int)
case class Ticket(id: Int)
case class Tickets(event: String,
entries: Vector[Ticket] = Vector.empty[Ticket])
case object GetEvent
case object Cancel
}
class TicketSeller(event: String) extends Actor {
import TicketSeller._
var tickets = Vector.empty[Ticket]
def receive = {
case Add(newTickets) => tickets = tickets ++ newTickets
case Buy(nrOfTickets) =>
val entries = tickets.take(nrOfTickets).toVector
if (entries.size >= nrOfTickets) {
sender() ! Tickets(event, entries)
tickets = tickets.drop(nrOfTickets)
} else sender() ! Tickets(event)
case GetEvent => sender() ! Some(BoxOffice.Event(event, tickets.size))
case Cancel =>
sender() ! Some(BoxOffice.Event(event, tickets.size))
self ! PoisonPill
}
}
Notice how the TicketSeller class imports all things from the TicketSeller object
import TicketSeller._
I have seen this "object in class" pattern before in which most if not all of the things in the object are case classes. Why is it done like this? What are the benefits and is it really a pattern or am I just not deep enough into things to fully understand?
Thank's a bunch!