2017-01-25 8 views
0

リフレクションAPIから取得したジェネリック型に基づいてクラスのフルパスを解決しようとしています。 List [Int]のinstaceには "Int" Stringのみがあります。ここに実例があります文字変数をスカラ反射に渡す方法typecheck quasiquote?

val toolBox=universe.runtimeMirror(getClass.getClassLoader).mkToolBox() 
toolBox.typecheck(q"??? : Int").tpe.typeSymbol.fullName 

フルネームは想定されているとおりです。

しかし、変数の形をquasiQuoteに変換した後 フルネームは、変数が何であっても常にjava.langStringです。 $ {t}がString型の式に解決されたとします。

val t = "Int" 
toolBox.typecheck(q"??? : ${t}").tpe.typeSymbol.fullName 

あなたが準クォートにタイプの名前をスプライスしたい場合は、それがTypeName、ないStringする必要があります助けてくれてありがとう、 クリス

+0

「java.lang.Int」は存在しません。 –

答えて

0

scala> import scala.reflect.runtime.universe._ 
import scala.reflect.runtime.universe._ 

scala> import scala.tools.reflect.ToolBox 
import scala.tools.reflect.ToolBox 

scala> val toolBox = runtimeMirror(getClass.getClassLoader).mkToolBox() 
toolBox: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = [email protected] 

scala> val t = "Int" 
t: String = Int 

scala> toolBox.typecheck(q"??? : ${TypeName(t)}").tpe.typeSymbol.fullName 
res0: String = scala.Int 
関連する問題