有没有更好的方法来编写这段代码?特别是可以将转换因子考虑在外部函数中吗?
nodes collect { case x: InstrumentSource[_] if (x.m <:< implicitly[ClassManifest[BarClose]]) => x.asInstanceOf[InstrumentSource[BarClose]] };
InstrumentSource中的是一个类清单:
case class InstrumentSource[A](implicit val m: ClassManifest[A])
和节点是各种InstrumentSource的集合。
答案 0 :(得分:1)
我的想法是:
trait HasClassManifest[A] {
def m: ClassManifest[A]
}
object <-< {
def apply[A : ClassManifest](a: HasClassManifest[_]): Boolean = {
a.m <:< classManifest[A]
}
}
case class InstSource[A](implicit m: ClassManifest[A]) extends HasClassManifest[A]
Seq(InstSource[Long],InstSource[Double]) collect {
case x if <-<[Long](x) => println("long")
case x if <-<[Double](x) => println("double")
}
(将InstrumentSource重命名为InstSource,不在此处滚动)
因此,价格定义HasClassManifest
和<-<
一次,您想要模式匹配的每个类都必须扩展HasClassManifest
。就是这样
但我现在不知道如何分析右侧的instanceOf
转换。