2

に含まれているscalaコードの一部を解析し、その式( )Stringの結果を取得したいと思います。私はもう試した:reflect.runtime.universe.TypeString => Type

scala> import scala.tools.nsc.interpreter.IMain
import scala.tools.nsc.interpreter.IMain

scala> new IMain().exprTyper.parse("scala.Option")
warning: there were 1 feature warning(s); re-run with -feature for details
res1: Option[List[_2.repl.global.Tree]] forSome { val _2: scala.tools.nsc.interpreter.IMain#exprTyper.type } = Some(List(scala.Option))

scala> .get.head
warning: there were 1 feature warning(s); re-run with -feature for details
res2: _2.repl.global.Tree forSome { val _2: scala.tools.nsc.interpreter.IMain#exprTyper.type } = scala.Option

scala> .tpe
res3: _2.type#repl.global.Type = null

scala> new IMain().runtimeTypeOfTerm("scala.Option")
warning: there were 1 feature warning(s); re-run with -feature for details
res5: _74.global.Type forSome { val _74: scala.tools.nsc.interpreter.IMain } = <notype>

scala> new IMain().typeOfTerm("scala.Option")
warning: there were 1 feature warning(s); re-run with -feature for details
res6: _75.global.Type forSome { val _75: scala.tools.nsc.interpreter.IMain } = <notype>

それは可能ですか?もしそうなら、どのようにそれをしますか?ありがとう。

UPD:私は実際の意図と、この質問の現在の位置を表明しました:IMAinを介してscalarepl内のタイプ情報を取得する

4

1 に答える 1

2

したがって、SOの周りに潜んでいた後(特にこの回答のおかげで)、私は次の結果に収束しました:

scala> def toType(expr: String): Type = {
     | import scala.tools.reflect.ToolBox
     | import scala.reflect.runtime.{currentMirror => m}
     | val tb = m.mkToolBox()
     | val exp = tb.parse(expr.trim)
     | tb.typeCheck(exp).tpe
     | }
toType: (expr: String)reflect.runtime.universe.Type

scala> toType("Option")
res2: reflect.runtime.universe.Type = Option.type

scala> toType("List")
res3: reflect.runtime.universe.Type = scala.collection.immutable.List.type
于 2013-03-27T13:57:23.427 に答える