我想知道是否有办法区分隐式转换而不列出TupleN
的22个选项?
implicit def forTuple[A <: Product](a:A) = createForTuple(a)
implicit def forCaseClass[A](a:A) = createForCaseClass(a)
为案例类选择了forTuple
方法,因为它们也扩展了产品。
答案 0 :(得分: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)
}