Ich habe eine einfache Funktion:Was ist der einfachste Weg zur Umgehung von [SI-6976] in Scala 2.10 für primitive Mustererkennung?
implicit class ArrayView[A](self: Array[A]) {
def filterByType[B <: A: ClassTag]: Array[B] = {
val ctg = implicitly[ClassTag[B]]
val runtimeClazz = ctg.runtimeClass
self.flatMap{
v =>
if (v.getClass.isAssignableFrom(runtimeClazz)) Some(v.asInstanceOf[B])
else None
}.toArray
}
}
und einen einfachen Testfall:
assert(Array(1, 2.2, "a").filterByType[Int].toSeq == Seq(1))
assert(Array(1, 2.2, "a").filterByType[java.lang.Integer].toSeq == Seq(1: java.lang.Integer))
assert(Array(1, 2.2, "a").filterByType[Double].toSeq == Seq(2.2))
assert(Array(1, 2.2, "a").filterByType[java.lang.Double].toSeq == Seq(2.2: java.lang.Double))
assert(Array(1, 2.2, "a").filterByType[String].toSeq == Seq("a"))
es nur in Scala arbeitet> 2.11.3 (wegen https://issues.scala-lang.org/browse/SI-6967, dies über längere Zeit gebracht worden), aber viele Bibliotheken (zB spark-hive_thriftserver) haben immer noch Probleme, auf 2.11 portiert zu werden, während 2.10 für die meisten anderen Fälle weitgehend stabil ist. Gibt es einen schnellen Patch für diesen Fehler?