我可以通过google找到使用Typeable演员的所有示例都包含for表达式。这对我有用,但我想知道这是否合适。我是一个全新的无形的人:这是我在lib中的第一次导入。
import shapeless.Typeable._
val blarg: Future[Any] = (worker ? ListOfLongsPlx(foo)) // I know Any === Try[List[Long]]
blarg.map {
_.cast[Try[List[Long]]] match {
case Some(Success(xs)) => xs
case Some(Failure(f)) => /* reporting the failure or just default: */ ; List()
case None => /*reporting bad cast just a default: */ List()
}
}
我是否应该预料到这种模式会出现问题?
要清楚,这是通过我的测试。
答案 0 :(得分:5)
您的方法很好(虽然我不明白特定代码如何工作,因为Try
不是Future
),但您实际上可以获得更好的语法模式与TypeCase
匹配:
import shapeless.TypeCase
import scala.util.{ Failure, Success, Try }
val thing: Any = Try(List(1L, 2L))
val TryListLongCase = TypeCase[Try[List[Long]]]
thing match {
case TryListLongCase(Success(xs)) => xs
case TryListLongCase(Failure(f)) => println(f); Nil
case _ => println("Some unexpected thing"); Nil
}
结果将适当地输入为List[Long]
。