我正在使用 Akka 和 scala。所以我在我的代码中调用 system.actorOf 或 context.actorOf 。但是,我正在包装 Akka 的库以创建演员,这样我就可以添加某些功能。因此,问题出现在如何允许我的更高级别抽象在任一上下文中工作。它们是在系统可用的环境中调用(在测试代码和应用程序的内核中),还是在参与者中调用(并且只能访问上下文变量)。
把它放在一起工作很容易。可以只创建一个函数,隐式获取上下文和系统,并根据可用的任何一个返回一个 ActorRef。然而,为了清除更多的重复,我遇到了一个问题。
还有许多其他地方我想自动访问范围内的任何地方(上下文或系统)。例如,如果我想调用 system.config 或 context.system.config,我需要为这种情况创建另一个包装函数。
我希望能够做这样的事情:
appropriate.actorOf(Props[Whatever], name = "breakfast")
并且适当的函数返回可用的任何一个(演员或系统),然后我会在两者之间有开关盒的每个地方使用这个函数。
我遇到的问题是,如果我从函数返回 Either[ActorContext, ActorSystem],我会收到一个错误,即 actorOf 在该类型上不可用。因此,它是根据类型检查它,而不是无论返回哪种类型都可以使用它。
有没有办法做我正在尝试的事情?