Сопоставление с шаблоном на основе ClassTag не выполняется для примитивов
Я думал, что следующее будет наиболее краткой и правильной формой для сбора элементов коллекции, которые удовлетворяют данному типу:
def typeOnly[A](seq: Seq[Any])(implicit tag: reflect.ClassTag[A]): Seq[A] =
seq.collect {
case tag(t) => t
}
Но это работает только дляAnyRef
типы, а не примитивы:
typeOnly[String](List(1, 2.3, "foo")) // ok. List(foo)
typeOnly[Double](List(1, 2.3, "foo")) // fail. List()
Очевидно прямая форма работает:
List(1, 2.3, "foo") collect { case d: Double => d } // ok. List(2.3)
Таким образом, должен быть (простой!) Способ исправить вышеуказанный метод.