我一直在试着理解如何阅读这个功能:
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)如果我必须了解这样的语法,我可以参考的最佳地点或书籍是什么?
答案 0 :(得分:2)
解决有关Actor.immutable
的API文档位置的评论:
正如Akka documentation明确指出的那样,Akka Typed API仍在不断变化:
该模块目前被标记为may change,是成为活跃研究的主题。这意味着API或语义可以在没有警告或弃用期间更改,并且不建议在生产中使用此模块 - 您已收到警告。
显然你使用的是2.5.5之前版本的Akka:版本2.5.10中的Actor
对象已从Akka Typed模块中删除。
akka.typed.scaladsl.Actor.immutable
方法。Actor.immutable
方法移至akka.actor.typed
包。akka.actor.typed.Actor
个对象。 2.5.11和2.5.12(撰写本文时Akka的当前版本)中仍然没有这个对象。以下是来自Akka 2.5.9的Actor.immutable
的最新版本的Scaladoc:
def immutable[T](onMessage: (ActorContext[T], T) => Behavior[T]): Immutable[T]
构造一个可以对传入消息和生命周期信号做出反应的actor行为。在从另一个演员(或作为
akka.actor.typed.ActorSystem
的守护者)产生这个演员之后,它将在允许访问系统,产生和观看其他演员等的ActorContext
内执行。此构造函数称为immutable,因为行为实例不需要并且实际上不应该使用(close over)可变变量,而是返回封装任何状态更改的可能不同的行为。
答案 1 :(得分:0)
immutable
是Actor
上的一种方法,它接受泛型类型参数,在这种情况下类型为Command
。
任何值得阅读的Scala材料介绍都应该涵盖泛型。 "用Scala编程"和#34; Scala for the Impatient"都很受欢迎。