したがって、キーの値を型を調べて返す暗黙のメソッドを追加したいとします。Scala Mapsに暗黙のgetAs()メソッドを追加する
import scala.reflect.ClassTag
object MyMap {
implicit class FlexMap[A](map: Map[String, A]) {
def getAs[B](key: String)(implicit ct: ClassTag[B]): Option[B] = map.get(key) match {
case Some(value: ct.runtimeClass) => Some(value.asInstanceOf[B])
case _ => None
}
}
}
しかし、私は試してみて、これをコンパイルすると、私が手:runtimeClassはscala.reflect.ClassTagのメンバーではありません
タイプ[B]
私は同じエラーを取得私が使っても:
case Some(value) if (value.isInstanceOf[ct.runtimeClass])
私はこれを回避する方法がわかりません。何か案は?
これはコンパイルされますが、Scalaは 'Any'を' Int'と解釈しません。たぶん予想される動作ですが、動作させるにはどうすればいいですか?これが私の言うことです。 'Map [String、Any](" foo " - > 1).getAs [Int](" foo ")'は 'None'を返します。 – aa8y
あなたのスニペットは私のために 'Option [Int] = Some(1)'を返します。 –
2.10では動作していないようですが、2.11で動作しています。 – aa8y