5

同じテキストが Scala REPL に直接入力されたかのように、Scala から任意の文字列を評価する方法はありますか? つまり、次のようなことをしたいと思います。

scala> eval("val x = 42")

scala> x
res2: Int = 42

Scala REPL は jline を使用して eval ループでコマンドを受け入れ (私は信じています)、それをコンパイル/解釈しているため、任意のテキスト行を送信する方法が必要です。必要に応じて Scala REPL をハックします。

4

2 に答える 2

14

scala.tools.nsc.interpreter.IMainREPL のハッキングは必要ありません。パワー ユーザー モードに切り替えるだけで、次のように currentにアクセスできますintp

scala> :power
** Power User mode enabled - BEEP BOOP SPIZ **
** :phase has been set to 'typer'.          **
** scala.tools.nsc._ has been imported      **
** global._ and definitions._ also imported **
** Try  :help,  vals.<tab>,  power.<tab>    **

scala> intp.interpret("val x = 42")
x: Int = 42
res0: scala.tools.nsc.interpreter.package.IR.Result = Success

scala> x
res1: Int = 42

これは、少なくとも 2.9.1 以降で機能します。

于 2012-08-12T16:21:42.373 に答える
2

もう 1 つの機会は、Twitter Utility からEvalを使用することです。

val x: Int = new Eval()("1 + 1")
于 2012-08-12T16:51:24.487 に答える