ActorRef具有下列方法:
final def tell(msg: Any, sender: ActorRef): Unit
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit
ActorSelection具有下列方法:
def tell(msg: Any, sender: ActorRef): Unit
def !(msg: Any)(implicit sender: ActorRef = Actor.noSender): Unit
这些方法不属于CanTell特征或类似特征的一部分,这有什么原因吗?我最近更改了一些代码,将消息发送到ActorSelection而不是ActorRef。我想如果我可以更通用地编写代码,以接受任何我可以向其发送消息的对象,那就太好了。
我从快照文档中得到了这个,但是看起来在2.2.3 api中是一样的。
3条答案
按热度按时间tyg4sfes1#
也许这并不是直接回答你的问题,但是你可以使用scala的一个特性,在这里你可以通过has方法定义可接受的类型,例如:
如果创建了这样的特征,您不必更改太多代码,但老实说,这在我看来相当难看:)
os8fio9y2#
下面是一个使用隐式转换的解决方案。
ev7lccsx3#
值得注意的是,在Akka Typed API中(不赞成使用
ActorSelection
,而支持将消息发送给接待员),ActorRef
、EntityRef
(在集群分片中)和TestProbe
(来自测试工具包)都扩展了RecipientRef
,RecipientRef
实际上是CanTell
接口(这些接口也提供ask模式)。