2013-04-17 83 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) 
} 
相關問題