2017-07-09 11 views
0

さIはアッカでこれを呼び出しています:アッカの俳優は型を返す任意の代わりのベクトル[製品]

for { 
    products <- myActor ? MyActor.Search("...", 25) 
} yield { 
    val model = MyModel(products) 
} 

MyModel(products)ラインがVector[Product]、実際Anyを期待というエラーがあります。

署名はこれです:

def search(searchText: String, hitsPerPage: Int): Vector[Product] 

なぜそれがAny型として戻ってくるのでしょうか?

found : Any 
[error] required: Vector[com.example.Product] 

応答を送信する必要がありますか?公式documentationから

答えて

5

が、将来は俳優で返されることに注意して俳優が動的であるため、Future[Any]です....使用する場合は、非ブロッキングmapToメソッドを使用することをお勧めしますmapTo方法は、新しいを返します

import scala.concurrent.Future 
import akka.pattern.ask 

val future: Future[String] = ask(actor, msg).mapTo[String] 

:安全に予想される型に未来をキャストしてみてくださいキャストが成功した場合は結果を含む、そうでない場合はClassCastException

だから、タイプVector[Product]の結果を得るためにmapToを使用することができます。

for { 
    products <- (myActor ? MyActor.Search("...", 25)).mapTo[Vector[Product]] 
} yield { 
    ... 
} 
+1

私たちが話題にしているが、それは可変状態の上に閉じ避けるために、 'pipeTo'を使用することも良いでしょう。 '(myActor?MyActor.Search(" ... "、25))。mapTo [Vector [Product]]。pipeTo(self)' – Ryan

関連する問題