2016-04-27 1 views
0

を使用して抽出記号:ランタイム反射 - 私はいくつかの種類や用語のシンボルを抽出する必要があり、現在、私は次のようにそれをやっている、単一の方法

val assetElem  = Asset(typeOf[Display].member(TermName("kindOfDisplay")).asMethod) 
val assetElem_2 = Asset(typeOf[Heat].typeSymbol) 
val assetElem_3 = Asset(typeOf[Temperature.type].termSymbol) 

私は最適化する方法方法はありますこのコードは、 "typeOf"の型をパラメータとして渡すだけで使うことができる汎用的なメソッドを作成します。任意の助け

何か

def asset[T](s: T): Symbol = typeOf[T].typeSymbol 

などのおかげ!

答えて

0

はい、あなただけのTypeTag[T]を必要とする: `TypeTag`-Sに私を案内するためのおかげで、私はそれらをチェックしています

def typeSymbol[T: TypeTag]: Symbol = typeOf[T].typeSymbol 

typeSymbol[Heat] 
+0

が、私は(与えられた例から)すべての3つのケースを含めるために必要な内'Heat'がクラス名の場合は' typeSymbol [Heat] '、' Temperature'がオブジェクトの場合は 'typeSymbol [Temperature]'、 'kindOfDisplay'がある場合は' typeSymbol [kindOfDisplay] 'と書くことができますメソッド... – user4712458

+0

型ではないので、 'Temperature'と' kindOfDisplay'のどちらもタイプパラメータではありません。 'Temperature'では、' typeSymbol [Temperature.type] 'を使って' SingletonType'を特別に扱うように本体を修正することができます。 'kindOfDisplay'については、私はあなたが' asset [Display](_。kindOfDisplay) 'よりも近づくことはできないと思っています、それが受け入れられるなら、https://stackoverflow.com/questions/36723968/extractcase- scala-field-name in scala/36725367#36725367は簡単に修正する必要があります。 –

+0

説明と参考に感謝します... – user4712458

関連する問題