그래서 유형을 검사하여 키 값을 리턴하는 암시 적 메소드를 추가하려고합니다. 나는 시도하고이를 컴파일 할 때스칼라 맵에 암시 적 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])
나는 이것을 회피하는 방법을 모르겠다. 어떤 아이디어?
이 컴파일되지만, 스칼라는'Any'를'Int'로 해석하지 못합니다. 어쩌면 예상되는 행동 일 수도 있지만 작동하게하려면 어떻게해야합니까? 이것이 내가 의미하는 바입니다. 'Map [String, Any] ("foo"-> 1) .getAs [Int] ("foo")'는'None'을 반환합니다. – aa8y
당신의 스 니핏은 나를 위해'Option [Int] = Some (1)'을 반환합니다. (2.11.8) –
2.10에서는 작동하지 않는 것처럼 보이지만 2.11에서는 보이게됩니다. – aa8y