【问题标题】:Scala : Syntactic SugarScala:语法糖
【发布时间】:2018-04-18 13:45:10
【问题描述】:

我一直在摸不着头脑去理解如何阅读这个函数:

private def greeterBehavior(currentGreeting: String): Behavior[Command] =
    Actor.immutable[Command] { (ctx, msg) =>
      msg match {
        case WhoToGreet(who) =>
          greeterBehavior(s"hello, $who")
        case Greet =>
          println(currentGreeting)
          Actor.same
      }
    }

问题:

1 ) 函数接受字符串并返回 Behavior[Command] 。 (理解) 但是.. Actor.immutable[Command] 是什么? 这是类型转换吗?或者它是一个对象?

2) 如果我必须理解这样的语法,我可以参考的最佳地点或书籍是什么?

【问题讨论】:

标签: scala akka akka-typed


【解决方案1】:

解决有关Actor.immutable API 文档位置的问题:

正如 Akka documentation 明确指出的那样,Akka Typed API 仍在不断变化:

这个模块目前被标记为may change,因为它是积极研究的主题。这意味着 API 或语义可以在没有警告或弃用期的情况下更改,并且不建议在生产中使用此模块 - 您已被警告。

显然您使用的是 2.5.10 之前的 Akka 版本:Actor 对象已从 2.5.10 版本的 Akka Typed 模块中删除。

  • Akka 2.5.2Akka 2.5.8,有一个akka.typed.scaladsl.Actor.immutable 方法。
  • 在 Akka 2.5.9 中,Actor.immutable 方法移至 akka.actor.typed 包。
  • 在 Akka 2.5.10 中,删除了 akka.actor.typed.Actor 对象。该对象在 2.5.11 和 2.5.12(撰写本文时的 Akka 的当前版本)中仍然不存在。

这是来自Akka 2.5.9Actor.immutable 最新版本的Scaladoc:

def immutable[T](onMessage: (ActorContext[T], T) => Behavior[T]): Immutable[T]

构造一个可以对传入消息和生命周期信号做出反应的参与者行为。从另一个演员(或作为akka.actor.typed.ActorSystem 的监护人)生成此演员后,它将在允许访问系统、生成和观看其他演员等的ActorContext 内执行。

这个构造函数被称为不可变的,因为行为实例不需要并且实际上不应该使用(关闭)可变变量,而是返回封装任何状态更改的可能不同的行为。

【讨论】:

    【解决方案2】:

    immutableActor 上的一个方法,它接受一个泛型类型参数,在这种情况下该类型是Command

    任何值得阅读的 Scala 介绍材料都应该涵盖泛型。 “Scala 编程”和“不耐烦的 Scala”都很受欢迎。

    【讨论】:

    • 在整个宇宙中只有一个 Actor 对象,而且在 scaladocs 中找到 akka.typed.scaladsl.Actor 完全没有问题,这真是太好了……
    • @AndreyTyukin 是的,我根本不知道 akka,但是我仍然花了很长时间才找到正确的 Actor,而且我什至在 scaladoc 中都没有看到它。绝对可以改进
    • @One 对我来说看起来像是有效的 scala,虽然笨拙的格式让它有点难以分辨(看起来你也包括了 repl 响应,而不仅仅是代码)。不过,我不确定它与您的问题或我的回答有何关系。您能否阐明您想要了解的内容?
    • 更正:这是普通 scala 中的正确示例吗? def abc(x : Int => Int) : Int = { x(10)}def one(a :Int) = abc { (x:Int) => x+a }var f1 = one(10)
    • @安德烈·秋金。你能帮我找到这方面的 API 文档吗?我找不到给定包/对象的 scala 类型帮助。
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2014-08-10
    • 2015-03-26
    • 1970-01-01
    • 2010-12-06
    • 2023-03-06
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多