繁体   English   中英

什么! b在Scala中是什么意思?

[英]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方法。 而且abc是单词还是符号都没有关系-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM