1
から防ぐことはできませんが、私はTraversableLikeのために、単純なヘルパー関数を書いている:ScalaのTypeTagがこのスレッドでは型消去
How to specify a type parameter in calling a function while let the compiler infer the other?
私は次の関数を実装します。
implicit class TraversableLikeView[A, Repr](self: TraversableLike[A, Repr]) {
def filterByType[B: TypeTag] = new FilterByType[B]
class FilterByType[B: TypeTag] {
def get[That](implicit bf: CanBuildFrom[Repr, B, That]): That = {
val result = self.flatMap{
v =>
val unboxed = Utils.javaUnbox(v)
unboxed match {
case x: B => Some(x)
case _ => None
}
}(bf)
result
}
}
}
ClassTag.unapplyはプリミティブクラスの処理に問題があったため、TypeTagが使用されています。 (ClassTagはここで、ほぼ完璧な仕事をしていた)
Warning:(304, 23) abstract type pattern B is unchecked since it is eliminated by erasure
case x: B => Some(x)
^
行うことを主張するTypeTag何に反している:私は上記のコードをコンパイルするときしかし、私は次の警告を得ました。この場合、TypeTagが失敗する理由はありますか?
を書くことができ、その場合には
scala.reflect.runtime.universe.TypeTag
を、使用している私はClassTagはすでに最新のScalaのバージョンでは廃止され、TypeTagが後継者であると思いましたか?では、TypeTagは何のために適していますか? – tribbloidいいえ、 'ClassTag'は推奨されていません。 'ClassManifest'があり、' ClassTag'がその置き換えです。 –