- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是代码:
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, amount: Int, 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: €${change}. "
} else ""
println(s"Here $verb $amount item$suffix of $item. ${changeInfo}Thanks!")
currentData.stock(item) -= amount
currentData.userBalance = 0
currentData
case StoreTransaction(credit, reason: String) =>
println(s"Transaction not successful. \n${reason}\n€${credit} stored on your balance.")
currentData.userBalance += credit
currentData
case DoReturnMoney =>
println(s"Here is your money: €${currentData.userBalance}.")
currentData.userBalance = 0
currentData
case Reject(reason) =>
println(s"Transaction rejected due to this reason: $reason")
currentData
}
}
startWith(Dumb, initData)
when(Dumb) {
case Event(Transaction(item, amount, input), currentData) =>
if (input <= 0) {
stay applying Reject("you didn't put in money.")
}
if (!currentData.stock.contains(item)) {
val reason = s"We don't have ${item}."
stay applying StoreTransaction(input, reason)
}
if (currentData.stock(item) < amount) {
val reason = s"We have only ${currentData.stock(item)} ${item} in stock."
stay applying StoreTransaction(input, reason)
}
val change = input + currentData.userBalance - prices(item) * amount
if (change >= 0) {
stay applying DoTransaction(item, amount, change)
} else {
val reason = s"Insufficient credit, €${-change} in short."
stay applying StoreTransaction(input, reason)
}
case Event(ReturnMoney, _) =>
stay applying DoReturnMoney
case Event(ToggleSmart, _) =>
goto(Smart)
}
when(Smart) {
case Event(Transaction(item, amount, input), currentData) =>
if (input <= 0) {
stay applying Reject("you didn't put in money.")
}
if (!currentData.stock.contains(item)) {
val suggestion = currentData.stock.keys.find(x => x.startsWith(item))
suggestion match {
case None =>
stay applying StoreTransaction(input, s"We can't find anything similar to ${item}")
case Some(item1) =>
self ! Transaction(item1, amount, input)
}
}
if (currentData.stock(item) < amount) {
val reason = s"We have only ${currentData.stock(item)} ${item} in stock."
stay applying StoreTransaction(input, reason)
}
val change = input + currentData.userBalance - prices(item) * amount
if (change >= 0) {
stay applying DoTransaction(item, amount, change)
} else {
val reason = s"Insufficient credit, €${-change} in short."
stay applying StoreTransaction(input, reason)
}
case Event(ReturnMoney, _) =>
stay applying DoReturnMoney
case Event(ToggleSmart, _) =>
goto(Dumb)
}
override def persistenceId: String = "persistence-vendor"
}
object VendorApp extends App {
import Vendor._
val asys = ActorSystem("persistence-vendor-app")
val vendor = asys.actorOf(Props[Vendor])
vendor ! Transaction("cola-light", 2, 5)
Thread.sleep(1000)
asys.terminate()
}
/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/tools.jar:/Users/kaiyin/IdeaProjects/Learning Akka (video) code/section4/persistent-fsm&query/target/scala-2.11/classes:/Users/kaiyin/.ivy2/cache/com.google.guava/guava/bundles/guava-16.0.1.jar:/Users/kaiyin/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.7.jar:/Users/kaiyin/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar:/Users/kaiyin/.ivy2/cache/org.iq80.leveldb/leveldb-api/jars/leveldb-api-0.7.jar:/Users/kaiyin/.ivy2/cache/org.iq80.leveldb/leveldb/jars/leveldb-0.7.jar:/Users/kaiyin/.ivy2/cache/org.fusesource.leveldbjni/leveldbjni-all/bundles/leveldbjni-all-1.8.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-testkit_2.11/jars/akka-testkit_2.11-2.4.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-stream-experimental_2.11/jars/akka-stream-experimental_2.11-1.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-persistence_2.11/jars/akka-persistence_2.11-2.4.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-persistence-query-experimental_2.11/jars/akka-persistence-query-experimental_2.11-2.4.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.0.jar:/Users/kaiyin/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain VendorApp
Uncaught error from thread [persistence-vendor-app-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[persistence-vendor-app]
java.lang.StackOverflowError
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
at Vendor.domainEventClassTag(Vendor.scala:70)
...
Process finished with exit code 255
build.sbt
:
name := "Persistence"
version := "1.0"
scalaVersion := "2.11.7"
sbtVersion := "0.13.5"
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.4.0",
"com.typesafe.akka" %% "akka-persistence" % "2.4.0",
"org.iq80.leveldb" % "leveldb" % "0.7",
"org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8",
"com.typesafe.akka" %% "akka-persistence-query-experimental" % "2.4.0",
"com.typesafe.akka" % "akka-stream-experimental_2.11" % "1.0
application.conf
:
akka {
persistence {
journal {
plugin = "akka.persistence.journal.leveldb",
leveldb {
dir = "target/example/journal",
native = false
}
},
snapshot-store {
plugin = "akka.persistence.snapshot-store.local",
local {
dir = "target/example/snapshots"
}
}
}
}
最佳答案
代替
override implicit def domainEventClassTag: ClassTag[DomainEvent] classTag[DomainEvent]
override def domainEventClassTag: ClassTag[DomainEvent] = classTag[DomainEvent]
关于scala - PersistentFSM 参与者中的 Stackoverflow 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427927/
使用 htaccess 我能够隐藏文件扩展名,使其成为/home 而不是/home.html。但是,对于主页,我想完全隐藏文件名,例如 stackoverflow.com,而不是 stackoverf
我试图在关闭子窗体时关闭我的主(父)窗体。然而,这给了我一个 StackOverflow 异常。 但是,如果我在 FormClosed 事件上调用 _child.Dispose,它会按预期工作。我应该
我在 IDEA 中使用 Gradle 并得到以下输出。 * What went wrong: A problem occurred evaluating script. > java.lang.Sta
我是一个 java 新手,并且在 StackOverflow 错误/在类之间访问文件的能力方面遇到了一个非常令人困惑的问题。我知道根本原因可能是我进行了一些递归调用,但修复它的语法却让我无法理解。我认
我需要编写一个程序来生成一些随机数,而不让两个数字落在某个范围内。不幸的是,我需要在学校做这件事,而我在计算机上唯一可以使用的语言是 Java(否则我会用 C++ 来做)。我对 Java 知之甚少,我
尝试设置一个 Person 类 我在尝试将信息封装在类中以使其不会被意外更改时遇到了问题。除了当我尝试使用 setter/getters 进行封装时,该类工作得非常好。我认为问题是这些方法最终会互相循
使用 scala,我已将大约 100000 个节点添加到链表中。当我使用函数 length 时,例如 mylist.length。我收到“java.lang.StackOverflowError”错误
我正在开发一个学校项目,该项目必须有 3 个带 1 个指针的快速排序、3 个带 2 个指针和 2 个堆的快速排序。 到目前为止,我已经编写了快速排序和堆之一。我遇到的问题是快速排序在小情况下工作正常,
我正在制作一个程序,它生成列表的所有子集,然后排列所有这些子集。我有一个生成子集的方法和一个生成排列的方法。但是,它们不能一起工作,即当我排列子集时,我没有得到子集的所有排列,并且出现 StackOv
我有以下函数,它应该产生笛卡尔平面中的所有坐标,我可以在n步中从原点到达: 原点是“位置”,步数是“强度”,它是一个 1-10 的整数。但是,我不断收到 stackoverflow 错误。每次我调用它
当我尝试使用 scala lib(使用 re2)匹配上述正则表达式时,代码进入以下路径并超时 1 分钟: 正则表达式: (([a-z0-9!#$%&'*+?^_`{|}~-]+(?:.[a-z0-9!
我正在开发一个运输 map 项目。我为该位置创建了一个名为 Chart 的对象和一个名为 Pos 的对象。我无法开始工作的是,当我从文本文件读取图表以正确创建对象 Pos 时,因为这就是失败的地方。
public class SortAnimal { public static Comparator getAnimalTagComparator() { return
我因使用以下泛型而收到 StackOverflowError: 积分: package me.expdev.gkitpvp; /* * Project created by ExpDev */ i
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我为一些命题逻辑表达式编写了一个javaCC解析器。表达式可能会很长,有 30k 个字符。 当我解析如此大的表达式时,出现堆栈溢出异常。 是否有一些虚拟机参数决定堆栈大小? 或者在这种情况下你会怎么做
这个问题已经有答案了: What is a StackOverflowError? (15 个回答) 已关闭 8 年前。 最高数字double可以代表极高,我想。尽管下面的代码会抛出异常。这实际上是我
我正在为我的 API 构建一个 SDK,其中有两个模块,分别是 A 类和 B 类。 public class A{ public final B = new B(); public f
执行此递归时,我收到堆栈溢出错误。有一个模式,它第一次说: at MazeGui.move(MazeGui.java:79) which is line if(rigting.goal == true
我编写的这段代码在达到一定的输入大小之前效果很好。如果输入太大,我会收到“java.lang.StackOverflowError”。我已经阅读了 stackoverflow 上有关此主题的其他一些条
我是一名优秀的程序员,十分优秀!