akka 一个部分应用的函数是否可能调用它的部分应用的自我?

t9aqgxwy  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(136)

我开始玩Akka,发现我的大多数演员都有一部分不可变状态和一部分可变状态。这两者都可以合并到一个State case类中,然后可以复制它的可变状态,并传递回apply以更新Behavior
然而,如果不是必要的话,那就太神奇了。一个部分应用的Scala函数有没有可能以某种方式递归地调用它自己,但从它的第二个参数列表开始?而不是从头开始整个链?

sealed trait Command
final case class AddA() extends Command
final case class AddB() extends Command

def apply(
  immutableState1: String,
  immutableState2: String,
  immutableState3: String
)(
  mutableState: List[String] = Nil
): Behavior[Command] = Behaviors.receiveMessage {

  // without respecifying all immutable state:
  case AddA() => CallIts2ndParamList("A" :: mutableState)

  // what I'm trying to avoid:
  case AddB() => apply(
    immutableState1,
    immutableState2,
    immutableState3
  )("B" :: mutableState)
}
q5iwbnjs

q5iwbnjs1#

啊,也许我在错误的区域寻找解决方案。一个嵌套的函数实际上应该可以做到这一点!

sealed trait Command
  final case class AddA() extends Command
  final case class AddB() extends Command

  def apply(
      immutableState1: String,
      immutableState2: String,
      immutableState3: String
  ): Behavior[Command] = {
    def nestedApply(mutableState: List[String]): Behavior[Command] =
      Behaviors.receiveMessage {
        case AddA() => nestedApply("A" :: mutableState)
      }
    nestedApply(Nil)
  }

相关问题