[英]what does a ! b mean in Scala?
我正在阅读一些Scala代码,该程序的部分内容如下:
clusterManager ! ClusterManagerMessages.Shutdown
clusterNotificationManager ! ClusterNotificationMessages.Shutdown
我看到 ! 是一元运算符,那么这段代码是什么意思?
在Scala语言中什么也没有(在您的上下文中),但这通常意味着Scala actor中的即发即弃 消息 。 还有?
当您希望以Future的形式处理响应时使用的副本。
!
运算符是Scala Actor API中tell
方法的简写。 用于akka.actor.ActorRef的Scaladoc提供了两个示例,其中一个示例适用于Scala和Java。 请注意,Java如何使用tell
方法,而Scala如何使用!
操作员。
就个人而言,当我第一次研究Scala演员时,发现它特别令人沮丧,并且没有找到二进制的明确定义!
Scaladocs中的运算符。 到目前为止,我发现最好的介绍给Scala Actors的资源是Odersky等人在Scala中编程 (第32章)。 如果您有时间和/或奉献精神来深入了解Akka Actor模型以及引擎盖下发生的事情,我建议您使用Akka in Action 。
!
在这种情况下,不是一元运算符。 如果您在Scala中看到这样的代码:
a b c
那么最有可能在将c
传递为参数a
对象上调用b
方法。 而且a
, b
和c
是单词还是符号都没有关系-Scala接受这两个。
在这种情况下, !
意思是“发送消息”,所以clusterManagement ! ClusterManagementMessages.Shutdown
clusterManagement ! ClusterManagementMessages.Shutdown
意味着将消息ClusterManagementMessages.Shutdown
发送给clusterManagement
。 有关这意味着什么的更多信息,请查找有关参与者模型的信息。
到目前为止,答案非常复杂!
在这种情况下,它肯定是(不同步的)消息发送运算符,而不是一元否定运算符,它在半标准Akka库中使用。 如果您不熟悉它们,请阅读Scala“ Actor”,以及如何通过负载和通过消息发送相互通信的小“ actor”负载构建系统。 在这种情况下,该代码似乎正在告诉“ clusterManager”关闭,然后向“ clusterNotificationManager”发送一条消息,告知其告诉clusterManager关闭。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.