不处理消息的 Akka(类型化)actor Behavior 的类型是什么?

What is the type of an Akka (Typed) actor Behavior that handles no messages?

假设我正在为 Akka(类型化)actor 定义一个行为,它将执行并发计算,将其结果报告给生成它的 actor,然后停止。

如果我使用计算的所有输入以及对其“父级”的引用来初始化此 actor,那么它将永远不需要接收任何类型的传入消息。

我将使用 Behaviors.setup 创建此行为,向其传递一个执行计算的函数,然后 returns Behaviors.stopped.

Akka(Typed)要求我为 return 此行为的函数提供某种 Behavior[T] 的结果类型。虽然我可以将行为将发送的结果消息的类型分配给 T,但这似乎不正确。 T 不是为了限制 actor 可以接收的消息吗?因此,如果我根据参与者将发送的消息类型定义 T,我不是在向编译器“撒谎”吗?

事实上,此行为不能 - 也不会 - 处理任何传入消息。

是否有更正确的类型可以分配给此行为?

或者我是否遗漏了类型化演员行为的要点?

示例:

在下面的代码中,我的 apply returns Behavior[ Result ],但这是一个谎言。它永远不会接收或处理 Result 消息。 (它只会发送一个。)

import akka.actor.typed.{ ActorRef, Behavior }
import akka.actor.typed.scaladsl.Behaviors

object ConcurrentComputation {

  sealed trait Result
  final case class Success( result : Double ) extends Result
  final case class Failure( exception : Throwable ) extends Result

  def apply(
    argX : Double,
    argY : Double,
    parent : ActorRef[ Result ]
  ) : Behavior[ Result ] = Behaviors.setup(
    context => {
      try {
        Success( compute( argX, argY ) )
      }
      catch {
        case e : Throwable => Failure( e )
      }

      Behaviors.stopped
    } 
  )

  // Never mind what's actually being done.
  def compute( x : Double, y : Double ) : Double = ???
}

到目前为止,我想到的最好的是 Behavior[ Any ]

这是错误的语义,因为它表达了与代码意图相反的意思。

实际上,我认为它不会损害代码执行,因为行为不能处理任何消息。

欢迎更好的回答。

一般来说,它用于Behaviors.setup[Nothing]表示没有收到任何消息的行为。假定演员会收到消息,但有时他们不会。例如,当您在 Akka Typed 中创建一个 ActorSystem 时,您需要为用户监护人 actor 提供一个 Behavior,该 actor 不会接收任何消息,您为该 actor 创建行为为 Behavior[Nothing].

此类型表示此 actor 无法接收任何消息,因为“不存在此类型的实例”(Nothing 类型)。