我正在阅读一些Scala代码,部分程序内容如下:
clusterManager ! ClusterManagerMessages.Shutdown
clusterNotificationManager ! ClusterNotificationMessages.Shutdown
我明白了!是一元运算符,这个代码是什么意思?
答案 0 :(得分:7)
在scala语言中没有(在您的上下文中),但它通常意味着scala actors中的 fire-n-forget消息。当你想要以Future的形式处理响应时,也会使用?
对应物。
答案 1 :(得分:5)
!
运算符是Scala Actor API中tell
方法的简写。 Scaladoc for akka.actor.ActorRef提供了两个示例,分别针对Scala和Java。请注意Java如何使用tell
方法,Scala使用!
运算符。
就个人而言,当我第一次研究Scala演员并且在Scaladocs中没有发现二元!
运算符的明确定义时,我发现它特别令人沮丧。到目前为止,我所发现的最好的资源是被引入Scala Actors的是Odersky等人的Programming in Scala(第32章)。如果您有时间和/或致力于深入了解Akka Actor模型以及幕后发生的事情,我建议Akka in Action。
答案 2 :(得分:3)
!
不是一元运算符。如果你在Scala中看到这样的代码:
a b c
然后,最有可能在b
对象上调用a
方法作为参数传递c
。 a
,b
和c
是单词还是符号并不重要 - Scala接受这两者。
在这种特殊情况下,!
表示“发送消息”,因此clusterManagement ! ClusterManagementMessages.Shutdown
表示将消息ClusterManagementMessages.Shutdown
发送给角色clusterManagement
。有关 的含义的更多信息,请查找有关actor模型的信息。
答案 3 :(得分:0)
到目前为止,答案非常复杂!
在这种情况下,它肯定是(非同步的)消息发送操作符,而不是一元否定操作符,并且它在半标准Akka库中使用。如果您不熟悉它们,请阅读Scala“Actors”以及如何使用负载和大量小“演员”构建系统,这些“演员”通过消息发送相互通信。在这种情况下,代码似乎告诉“clusterManager”关闭,然后向“clusterNotificationManager”发送消息,告知clusterManager要关闭。