加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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:                         

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读