scala – PersistentFSM actor中的Stackoverflow异常
发布时间:2020-12-16 09:58:34 所属栏目:安全 来源:网络整理
导读:这是代码: import akka.actor.{ActorSystem,Props}import akka.persistence.fsm.PersistentFSMimport akka.persistence.fsm.PersistentFSM.FSMStateimport scala.reflect._import scala.reflect.ClassTag/** * Created by IDEA on 4/4/16. */object Vendor
这是代码:
import akka.actor.{ActorSystem,Props} import akka.persistence.fsm.PersistentFSM import akka.persistence.fsm.PersistentFSM.FSMState import scala.reflect._ import scala.reflect.ClassTag /** * Created by IDEA on 4/4/16. */ object Vendor { sealed trait State extends FSMState case object Dumb extends State { override def identifier = "dumb-state" } case object Smart extends State { override def identifier = "smart-state" } val prices = Map( "cola-light" -> 1.23,"cola-fanta" -> 1.23,"cola" -> 1.23,"lays-natural" -> 3.92,"lays-paprika" -> 3.24,"lays-mix" -> 2.56,"lays-superchips" -> 3.99 ) case class Data(var userBalance: Double,val stock: collection.mutable.Map[String,Int]) sealed trait DomainEvent case class DoTransaction(item: String,amount: Int,change: Double) extends DomainEvent case class StoreTransaction(credit: Double,reason: String) extends DomainEvent case object DoReturnMoney extends DomainEvent case class Reject(reason: String) extends DomainEvent sealed trait Msg case class Transaction(item: String,input: Double) extends Msg case object ToggleSmart extends Msg case object ReturnMoney extends Msg } class Vendor extends PersistentFSM[Vendor.State,Vendor.Data,Vendor.DomainEvent] { import Vendor._ val initData = Data(0d,collection.mutable.Map( "cola-light" -> 10,"cola-fanta" -> 10,"cola" -> 10,"lays-natural" -> 10,"lays-paprika" -> 10,"lays-mix" -> 10,"lays-superchips" -> 10 )) override implicit def domainEventClassTag: ClassTag[DomainEvent] = classTag[DomainEvent] override def applyEvent(domainEvent: DomainEvent,currentData: Data): Data = { domainEvent match { case DoTransaction(item,amount,change) => val (verb,suffix) = if (amount > 1) ("are","s") else ("is","") val changeInfo = if (change > 0) { s"And here is your change: |