0
次のコードを使用することができません。 isInstanceOf [T]にバインドされたClassTagコンテキストも認識できるようにする方法はありますか?スカラisInstanceOf [T]関数は有界ClassTag/TypeTag
次のコードを使用することができません。 isInstanceOf [T]にバインドされたClassTagコンテキストも認識できるようにする方法はありますか?スカラisInstanceOf [T]関数は有界ClassTag/TypeTag
予想通り、私はこれが働いていると言うではないでしょう。それがすべてでClassTag
Sを使用しないよう
scala> (new Foo[String] {}).v(List(1))
res10: Any = Some(List(1)) // Not a String!
は、isInstanceOf
を使用しないでください。代わりに、ClassTag
抽出器を使用することができます。
abstract class Foo[T: ClassTag] {
def v(a: Any) = a match {
case _: T => Some(a)
case _ => None
}
}
scala> (new Foo[String] {}).v(1)
res3: Option[Any] = None
scala> (new Foo[String] {}).v("abc")
res4: Option[Any] = Some(abc)
はこれがために、すべてのシンタックスシュガーです:
abstract class Foo[T](implicit ct: ClassTag[T]) {
def v(a: Any) = a match {
case ct(a) => Some(a)
case _ => None
}
}