它是什么样的实现?

时间:2019-08-23 19:50:51

标签: scala akka akka-typed

akka website上,您可以定义以下内容:

sealed trait AccountCommand[Reply] extends ExpectingReply[Reply]
final case class Withdraw(amount: BigDecimal)(override val replyTo: ActorRef[OperationResult])
    extends AccountCommand[OperationResult]

如何将ActorRef分配给replyTo

我以代码为例,尝试实现自己的类型:

case object Channel (override val replyTo: ActorRef[SendMessage])
  extends ExpectingReply[SendMessage]

,编译器抱怨。

这样,编译器不会抱怨:

case object Channel extends ExpectingReply[SendMessage] {
  override def replyTo: ActorRef[SendMessage] = ???
}  

akka网站上的示例是否错误?

1 个答案:

答案 0 :(得分:2)

如果您的消息没有字段,则可以使用不带参数的case class

case class Channel()(override val replyTo: ActorRef[SendMessage])
  extends ExpectingReply[SendMessage]

如果您询问如何创建此类的实例,则应使用标准的多参数函数调用语法:

val msg = Channel()(sendMessageActorRef)

话虽如此,在我看来,特别是在链接到的Akka API的那一部分中,您不必显式提供任何ActorRefEffect似乎确实可以有点自动。

相关问题