1

scala ClassTags での作業 classTag.runtimeClass.isInstance を AnyVal オブジェクトで使用すると、正しく動作しないことがわかりました。これをテストできるスニペットを次に示します。これを AnyVal オブジェクトで機能させるためのアイデアはありますか?

import scala.reflect.ClassTag
import scala.reflect.runtime.{universe => ru}
object Test {
  def extractField[U: ru.TypeTag](json: Map[String, Any], field: String)(implicit classTag: ClassTag[U]): Option[U] = {
    json.get(field) match {
      case Some(value) =>
        if(classTag.runtimeClass.isInstance(value))
          Some(value.asInstanceOf[U])
        else {
          None
        }
      case _ =>
        None
    }
  }
  val map: Map[String,Any] = Map("k1" -> 2.0, "k2" -> "v")
  extractField[Double](map,"k1") // RETURNS NONE
  extractField[String](map,"k2") // RETURNS Some("v")
}

ところで、私はScala 2.10で作業しています

4

1 に答える 1