[SCALA] 스칼라에서 제네릭 형식에 대한 패턴 매칭
SCALA스칼라에서 제네릭 형식에 대한 패턴 매칭
나는 스칼라 기능을 가지고 그 다음과 같다 :
이제 T의 유형에 따라 (내 경우, 더블, 부울 및 LOCALDATE 될 수 있습니다) 나는 산부인과에 기능을 적용해야합니다. 이런 식으로 뭔가 (I 코드가 더 이해가되지 않습니다 알고 있지만 내가 할 의미를 전달하기 위해 노력하고 있어요)
def X[T](ob: Observable[T]): Observable[T] = {
//code
T match {
case Double => DoSomething1(ob:Observable[Double]):Observable[Double]
case Boolean => DoSomething2(ob:Observable[Boolean]):Observable[Boolean]
case LocalDate => DoSomething3(ob:Observable[LocalDate]):Observable[LocalDate]
}
}
고려 스칼라의 소거 속성을 촬영, 반사은 어떻게 든 작업을 완수하는 데 사용할 수 있습니다? 심지어 수 있습니까?
해결법
-
==============================
1.당신이에 있다면 나는 TypeTag와 함께 갈 것 2.10+
당신이에 있다면 나는 TypeTag와 함께 갈 것 2.10+
import reflect.runtime.universe._ class Observable[Foo] def X[T: TypeTag](ob: Observable[T]) = ob match { case x if typeOf[T] <:< typeOf[Double] => println("Double obs") case x if typeOf[T] <:< typeOf[Boolean] => println("Boolean obs") case x if typeOf[T] <:< typeOf[Int] => println("Int obs") } X(new Observable[Int]) // Int obs
이 긴하지만, 멋진 대답 참조
또한 난 단지 스칼라 반사에서 엿볼했다합니다, 그래서 아마 누군가가 TypeTag 사용의 더 나은 예를 쓸 수 있습니다.
from https://stackoverflow.com/questions/21285235/pattern-matching-on-generic-type-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 자바 8 스트림, 점점 머리와 꼬리 (0) | 2019.11.09 |
---|---|
[SCALA] 자바 8 스트림 API와 정수의 목록을 셔플 (0) | 2019.11.09 |
[SCALA] 왜`배열 (0,1,2) == 배열 (0,1,2)`예상 된 결과를 반환하지 않습니다? (0) | 2019.11.09 |
[SCALA] 소스가 Source.actorRef에서 만든 akka 스트림의 기본 ActorRef 액세스 (0) | 2019.11.09 |
[SCALA] 앞으로의 참조 - 왜이 코드를 컴파일합니까? (0) | 2019.11.09 |