什么了! b在斯卡拉意味着什么?

时间:2013-12-28 21:33:17

标签: scala operators

我正在阅读一些Scala代码,部分程序内容如下:

clusterManager ! ClusterManagerMessages.Shutdown
clusterNotificationManager ! ClusterNotificationMessages.Shutdown

我明白了!是一元运算符,这个代码是什么意思?

4 个答案:

答案 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方法作为参数传递cabc是单词还是符号并不重要 - Scala接受这两者。

在这种特殊情况下,!表示“发送消息”,因此clusterManagement ! ClusterManagementMessages.Shutdown表示将消息ClusterManagementMessages.Shutdown发送给角色clusterManagement。有关 的含义的更多信息,请查找有关actor模型的信息。

答案 3 :(得分:0)

到目前为止,答案非常复杂!

在这种情况下,它肯定是(非同步的)消息发送操作符,而不是一元否定操作符,并且它在半标准Akka库中使用。如果您不熟悉它们,请阅读Scala“Actors”以及如何使用负载和大量小“演员”构建系统,这些“演员”通过消息发送相互通信。在这种情况下,代码似乎告诉“clusterManager”关闭,然后向“clusterNotificationManager”发送消息,告知clusterManager要关闭。