2015-03-24 19 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