2013-04-17 1 views
3

암시 적 변환을 구별하는 방법이 있는지 궁금합니다. TupleN의 22 가지 옵션을 나열 하시겠습니까?사례 클래스와 튜플을 구별 할 수있는 방법이 있습니까?

implicit def forTuple[A <: Product](a:A) = createForTuple(a) 
implicit def forCaseClass[A](a:A) = createForCaseClass(a) 

forTuple 방법은 제품을 확장하기 때문에 사례 클래스에 대해 선택됩니다. 아래 그림과 같이 (당신이 스칼라 2.10 버전을 사용하는 경우)

+2

튜플, 당신은 (22 명) 명시 적으로 언급하지 않고 그들을 구별 할 수있는 방법 확실하지 않은 경우 클래스입니다. – Noah

+0

아, 젠장, 그걸 깜빡 했어. – EECOLOR

답변

2

당신은 반사하여이 작업을 수행 할 수 있습니다

import scala.reflect.runtime.universe._ 

def forEither[P <: Product : TypeTag](product: P) = { 
    if (typeOf[P].typeSymbol.asClass.isCaseClass) forCaseClass(product) 
    else forTuple(product) 
} 
관련 문제