【问题标题】:what does a ! b mean in Scala?a 是什么意思! b 在 Scala 中是什么意思?
【发布时间】:2014-01-16 03:54:35
【问题描述】:

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

clusterManager ! ClusterManagerMessages.Shutdown
clusterNotificationManager ! ClusterNotificationMessages.Shutdown

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

【问题讨论】:

  • @geedubb 谢谢,但 TutorialsPoint 网站只显示一元大小写。
  • 在这种情况下,它很可能是触发消息而不是逻辑运算符。
  • 什么是火灾信息?
  • @La-comadreja Don 的意思是“即发即弃的消息”,而不是询问和等待响应。顺便说一句,谢谢你教我如何用西班牙语说“鼬鼠”。 :^)

标签: scala operators


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    ! 在这种情况下不是一元运算符。如果你在 Scala 中看到这样的代码:

    a b c
    

    那么这很可能是在 a 对象上调用 b 方法,并将 c 作为参数传递。 abc 是单词还是符号并不重要——Scala 两者都接受。

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

    【讨论】:

      【解决方案3】:

      ! 运算符是 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

      【讨论】:

      • 高中时我花了好几年的时间才学会如何正确拼写tell。我很高兴,终于有人解决了这个麻烦!
      • Scala Actors 已被弃用。
      • @Ryan 听起来很熟悉,但你能提供一个链接吗? latest Scaladoc for 2.10.3 没有提供任何弃用迹象。
      【解决方案4】:

      在 scala 语言中什么都没有(在您的上下文中),但它通常意味着 fire-n-forget messagescala actors。还有 ? 对应项,当您希望以 Future 的形式处理响应时使用它。

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 2017-02-02
        • 2013-12-16
        • 2023-03-27
        • 2014-02-09
        • 2012-06-14
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多