아파치 스파크를 사용하고 있습니다. 내 서브 루틴 중 하나는 RDD [T : ClassTag]의 T : ClassTag가 Map의 서브 클래스인지 확인하는 것입니다.왜 scala.reflect.runtime.universe.classTag [T] 함수가 누락 되었습니까?
나는 스칼라 반사에 많은 소스를 확인했는데 그들은 모두 다음 코드 제안 : 만 분명히 여기에 작동하지 않습니다 대해서 typeof 및 weakTypeOf를 참조
import scala.reflect.runtime.universe._
if classTag[T] <:< classTag[Map[_,_]] {do something...}
classTag 기능이없는 것 같습니다 그러나이 (유형 삭제 때문에 : RDD의 ClassTag는 TypeTag보다 훨씬 적은 정보를 전달합니다). 그것은 나중에 다른 스칼라 버전에서 다른 곳으로 옮겨 졌습니까? 사용하고 있습니다 2.10.4
고마워요! 당신은 같은 방법으로에 TypeTag
를 얻을 수 있습니다
import scala.reflect.runtime.universe._
scala> typeTag[Int].tpe <:< typeTag[Any].tpe
res54: Boolean = true
scala> typeTag[Int].tpe <:< typeTag[Boolean].tpe
res55: Boolean = false
:
감사합니다 많이! 질문 하나 더 드릴까요? <: <는 2.10 이후에 @deprecated로 표시되었습니다. (대신 하위 유형 검사를 위해 scala.reflect.runtime.universe.TypeTag를 사용하십시오). ClassTag는 내가 가진 전부이기 때문에 분명히 작동하지 않을 것입니다.이 경고를 회피/억제하는 방법은 무엇입니까? – tribbloid
알아두기 : classOf [map [_, _]]. isAssignableFrom (classTag [T] .runtimeClass) 함수 이름이 너무 이상합니다. 쓸데없는 생각없이 읽지 않아요. – tribbloid
Java 방식으로, typeTags를 사용할 수 있습니다. 내 업데이트 – dk14