2012-09-23 33 views
5

我想动态地将一个字符串解释为Scala中的命令。为此,根据我的理解,我需要在电源模式下调用intp.interpret("string")(其中intp代表当前的译员,string代表我的命令),对吧?从脚本启用REPL高级用户模式(:电源)

但是,我的问题是,我想从脚本内部做到这一点。因此,我正在寻找一种从脚本内切换到高级用户模式的方法,然后调用intp.interpret。

有没有办法从脚本文件中进行切换?

+1

其实我发现了一个丑陋的解决方案:你可以写':power'在一个文件中(我们称之为'init'),然后单独运行scala解释器。然后,执行':load init'(它会切换到电源模式),然后从'load program'执行想要解释字符串的程序。 'intp'变量现在应该是可见的。但是,我会欢迎更漂亮的解决方案:-) –

回答

1

如果你从一个bash脚本调用REPL或诸如此类,那么你可以启用立即:power模式通过scala.repl.power系统属性,

[email protected]$ scala -Dscala.repl.power 
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_05) 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> 
[info] compiler init time: 2.186 s. 

scala> 
** 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> 
[info] total init time: 5.105 s. 

scala> 
+0

不。试过,但它不起作用(2.9.2版本以及我的机器)。如果你运行scala -Dscala.repl.power,那么它将工作(虽然在解释器的加载和启用电源模式之间有一些延迟),但是如果你运行scala -Dscala.repl.power脚本文件,那么它不会。解释器抱怨找不到intp值。 –