私の Scala コードが Scala クラスを入力として受け取り、そのクラスをコンパイルして実行するようにしたいと考えています。プログラムで Scala コンパイラを呼び出すにはどうすればよいですか? 最新の Scala バージョン、つまり 2.10 を使用します。
3184 次
2 に答える
13
ツールボックス
Scala コンパイラを呼び出す適切な方法は、 Overviewに記載されている Reflection API を介して行うことだと思います。具体的には、「シンボル、ツリー、およびタイプ」の「ツールボックスの解析によるツリーの作成String
」セクションでは、解析してTree
を使用することについて説明していToolBox
ます。eval()
その後、などを呼び出すことができます。
scala.tools.nsc.Global
しかし、Shyamendra Solanki が書いたように、実際には scalac を駆動Global
してより多くのことを成し遂げることができます。CompilerMatcherを作成したので、生成されたコードをサンプル コードでコンパイルして、たとえば統合テストを実行できます。
scala.tools.ncs.IMain
REPL を呼び出してコードを評価できます ( Scala 2.10 で動作するものが必要な場合IMain
は、上記でも利用できます)。CompilerMatcher
val main = new IMain(s) {
def lastReq = prevRequestList.last
}
main.compileSources(files.map(toSourceFile(_)): _*)
code map { c => main.interpret(c) match {
case IR.Error => sys.error("Error interpreting %s" format (c))
case _ =>
}}
val holder = allCatch opt {
main.lastReq.lineRep.call("$result")
}
これは、2009 年に Josh Suereth が投稿した Scala インタープリターの埋め込みで実証されました。
于 2013-12-02T07:59:39.520 に答える