3

の22のオプションをリストせずに暗黙の変換を区別する方法があるのだろうTupleNか?

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

forTupleケースクラスは製品も拡張するため、メソッドが選択されます。

4

1 に答える 1

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)
}
于 2013-05-06T02:22:10.733 に答える