Как узнать, является ли объект экземпляром типа TypeTag?

У меня есть функция, которая может узнать, является ли объект экземпляром типа Manifest. Я хотел бы перенести его на версию TypeTag. Старая функция следующая:

def myIsInstanceOf[T: Manifest](that: Any) = 
  implicitly[Manifest[T]].erasure.isInstance(that)

Я экспериментировал с TypeTags и теперь у меня есть эта версия TypeTag:

// Involved definitions
def myInstanceToTpe[T: TypeTag](x: T) = typeOf[T]
def myIsInstanceOf[T: TypeTag, U: TypeTag](tag: TypeTag[T], that: U) = 
  myInstanceToTpe(that) stat_<:< tag.tpe

// Some invocation examples
class A
class B extends A
class C

myIsInstanceOf(typeTag[A], new A)        /* true */
myIsInstanceOf(typeTag[A], new B)        /* true */
myIsInstanceOf(typeTag[A], new C)        /* false */

Есть ли лучший способ выполнить эту задачу? Можно ли параметризованный Uопустить, используя Anyвместо (, как это делается в старой функции )?

19
задан jeslg 24 July 2012 в 09:54
поделиться