2016-08-04 8 views
1

の取得結果は私のAkka俳優・システムは例えば、メッセージの内容スカラ:部分写像

myEventActor.expectMsgPF() { 
    verifyEventPF(id) 
} 

def verifyEventPF(id: String): PartialFunction[Any, Any] = { 
    case e : MyEvent if e.id == id => e.otherID 
} 

を確認するためにいくつかのテストを持って、私たちはイベントのIDが正しいかどうかを確認するために、この部分的な機能を使用しています。 しかし、部分関数の結果を得るにはどうすればいいですか?次のことを達成したい場合

myEventActor.expectMsgPF() { 
    var otherID = verifyEventPF(id) // How do I achieve this? 
} 

これは可能ですか?

(私はここに部分関数を使用する必要はありませんし、Akka TestProbe.receiveOne()を使用することができますが、私はこれが可能であるかを理解したいのですが認識しています)

答えて

2

verfiyEventPF(id)戻りPartialFunction[Any, Any]を呼び出します。返された関数を呼び出す必要があります(もちろん入力してください):verifyEventPF(id)(event)

これは、次と同じです:

val getId: PartialFunction[Any, Any] = verifyEventPF(id) 
getId(event) 

あなたが特定の入力用に定義されていない部分funcitonを懸念している場合、関数は与えられた値のために定義されている場合、あなたが確認できます。

if (getId.isDefinedAt(event)) { 
    getId(event) 
} 

それともOptionを返す合計関数に部分関数を持ち上げることができます。

val totalGetId: (Any => Option[Any]) = getId.lift 
val result: Option[Any] = totalGetId(event) 
関連する問題