복붙노트

[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. ==============================

    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 사용의 더 나은 예를 쓸 수 있습니다.

  2. from https://stackoverflow.com/questions/21285235/pattern-matching-on-generic-type-in-scala by cc-by-sa and MIT license