2013-04-17 84 views
3

我不知道是否有没有列出22个选项TupleN来区分隐式转换的方法?有没有办法区分一个案例类和一个Tuple?

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

forTuple方法被选为案例类,因为它们也扩展了产品。

+2

元组是case类,不知道你如何区分它们没有明确的22个引用。 – Noah

+0

啊,该死的,是的,我忘记了...... – EECOLOR

回答

2

你可以用反射做到这一点,如下图所示(如果你使用的Scala 2.10版本):

import scala.reflect.runtime.universe._ 

def forEither[P <: Product : TypeTag](product: P) = { 
    if (typeOf[P].typeSymbol.asClass.isCaseClass) forCaseClass(product) 
    else forTuple(product) 
} 
相关问题