斯卡拉:句法糖

时间:2018-04-18 13:45:11

标签: scala akka akka-typed

我一直在试着理解如何阅读这个功能:

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)如果我必须了解这样的语法,我可以参考的最佳地点或书籍是什么?

2 个答案:

答案 0 :(得分:2)

解决有关Actor.immutable的API文档位置的评论:

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

  

该模块目前被标记为may change,是成为活跃研究的主题。这意味着API或语义可以在没有警告或弃用期间更改,并且不建议在生产中使用此模块 - 您已收到警告。

显然你使用的是2.5.5之前版本的Akka:版本2.5.10中的Actor对象已从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]
  

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

     

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

答案 1 :(得分:0)

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

任何值得阅读的Scala材料介绍都应该涵盖泛型。 "用Scala编程"和#34; Scala for the Impatient"都很受欢迎。