2015-03-24 13 views
0

在Akka Persistence中,persist方法的计划用途是什么?我看到有这样here签名:如何调用Seq变种持续?

final def persist[A](events: Seq[A])(handler: (A) ⇒ Unit): Unit 

但如果我尝试调用它,如下面的例子

def receiveCommand= { 
    case x ⇒ 
    val events = Seq(Event("1"), Event("2")) 
    persist(events) { 
     e ⇒ println(e) // here it gets printed "List(Event(1),Event(2))" 
    } 
} 

我得到一个印单个事件为List(Event(1),Event(2))。也就是说,我希望分别处理每个事件并按照它们的顺序处理。但是,相反,它似乎是在以下persist变种

final def persist[A](event: A)(handler: (A) ⇒ Unit): Unit 

参数ASeq[Event]更换,而不是通过类型被Event更换调用序列变体。什么是使用这种方法的预期方式?

谢谢。

+0

是否'坚持[事件](事件)'工作? – Kolmar 2015-03-24 23:27:15

+0

@Kolmar它没有。 – ale64bit 2015-03-25 07:54:04

回答

2

注意

final def persist[A](events: Seq[A])(handler: (A) ⇒ Unit): Unit 

需要一个

scala.collection.immutable.Seq 

作为参数,所以你必须在这个具体的序列类型来传递:

val events: scala.collection.immutable.Seq = scala.collection.immutable.Seq("event") 
persist(events) { event => 
    log.debug("persisted " + event) 
} 
+0

因此,当你在不指定的情况下编写Seq(1,2,3)'时,它实际上是一个可变的序列? – ale64bit 2015-03-25 07:52:28

+0

不。它实际上是一个不可变的序列,因为这是scala中的默认值。但是这里的问题在于它不是这样键入的。您可以在源文件的顶部导入scala.concurrent.immutable.Seq,以声明所有序列都是不可变的。阿卡人希望确保seq必须是不可变的,但应选择不同的方法名称以防止混淆。 – 2015-03-26 08:51:14