Я довольно новичок в Scala, но столкнулся с каким-то кодом кодирования из кода, который я видел до сих пор. Вот пример того, что я говорю:Шаблон композиции Scala/Akka (объект в классе)
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
}
}
Обратите внимание, как TicketSeller класса импортирует все вещи из объекта TicketSeller
import TicketSeller._
Я видел этот «объект в классе» шаблон, в котором большинство, если не все вещи в объекте, являются классами case. Почему это делается так? Каковы преимущества и действительно ли это образец, или я недостаточно глубоко разбираюсь в вещах, чтобы их полностью понять?
Спасибо, связка!
Использование 'Props (new MyActor)' опасно только в том случае, если вы делаете это внутри другого Актера. В вашей ссылке упоминается, что способ, которым @Alexandr использует его, внутри объекта-компаньона, является рекомендуемой практикой. – rgcase
Достаточно честный; Сегодня я перефразирую. – alf
Большое спасибо! – Alexandr