14

私の Scala コードが Scala クラスを入力として受け取り、そのクラスをコンパイルして実行するようにしたいと考えています。プログラムで Scala コンパイラを呼び出すにはどうすればよいですか? 最新の Scala バージョン、つまり 2.10 を使用します。

4

2 に答える 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 に答える