转换和类型擦除

时间:2011-11-10 14:03:41

标签: scala

有没有更好的方法来编写这段代码?特别是可以将转换因子考虑在外部函数中吗?

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的集合。

1 个答案:

答案 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转换。