5

Is there a way to evaluate a arbitrary string from Scala as if the same text was entered into the Scala REPL directly? I mean, I would like to do something like this:

scala> eval("val x = 42") scala> x res2: Int = 42 

Since the Scala REPL is accepting commands in an eval loop using jline (I believe) and then compiling/interpreting it, there has to be a way to submit an arbitrary line of text. I am willing to hack the Scala REPL if necessary.

1
  • There might be a simpler way, but worst case you can always write it to a file and use load() Commented Aug 12, 2012 at 15:55

2 Answers 2

14

No REPL hacking necessary—just switch to power user mode, which gives you access to the current scala.tools.nsc.interpreter.IMain as 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 

This works since at least 2.9.1.

Sign up to request clarification or add additional context in comments.

Comments

2

Another opportunity is to use Eval from Twitter Utility:

val x: Int = new Eval()("1 + 1") 

2 Comments

I don't think there's any way to use Eval to do what the question asks—to evaluate a string defining a val and have that variable be visible to the REPL (if I'm wrong please correct me).
@TravisBrown you're right: the same level of comfort is not possible.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.