我在akka中称呼这个:
for {
products <- myActor ? MyActor.Search("...", 25)
} yield {
val model = MyModel(products)
}
Run Code Online (Sandbox Code Playgroud)
该MyModel(products)行有一个错误说预期Vector[Product],实际Any.
签名是这样的:
def search(searchText: String, hitsPerPage: Int): Vector[Product]
Run Code Online (Sandbox Code Playgroud)
为什么它会以Any类型返回?
found : Any
[error] required: Vector[com.example.Product]
Run Code Online (Sandbox Code Playgroud)
我需要投射回复吗?
从官方文档:
另请注意,Actor返回的Future是一个
Future[Any]因为Actor是动态的....当使用非阻塞时,最好使用该mapTo方法安全地尝试将Future转换为期望的类型:
import scala.concurrent.Future
import akka.pattern.ask
val future: Future[String] = ask(actor, msg).mapTo[String]
Run Code Online (Sandbox Code Playgroud)
如果转换成功,该
mapTo方法将返回Future包含结果的new ,否则返回ClassCastException.
所以你可以mapTo用来获得类型的结果Vector[Product]:
for {
products <- (myActor ? MyActor.Search("...", 25)).mapTo[Vector[Product]]
} yield {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |