我想动态地将一个字符串解释为Scala中的命令。为此,根据我的理解,我需要在电源模式下调用intp.interpret("string")
(其中intp
代表当前的译员,string
代表我的命令),对吧?从脚本启用REPL高级用户模式(:电源)
但是,我的问题是,我想从脚本内部做到这一点。因此,我正在寻找一种从脚本内切换到高级用户模式的方法,然后调用intp.interpret。
有没有办法从脚本文件中进行切换?
我想动态地将一个字符串解释为Scala中的命令。为此,根据我的理解,我需要在电源模式下调用intp.interpret("string")
(其中intp
代表当前的译员,string
代表我的命令),对吧?从脚本启用REPL高级用户模式(:电源)
但是,我的问题是,我想从脚本内部做到这一点。因此,我正在寻找一种从脚本内切换到高级用户模式的方法,然后调用intp.interpret。
有没有办法从脚本文件中进行切换?
如果你从一个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>
不。试过,但它不起作用(2.9.2版本以及我的机器)。如果你运行scala -Dscala.repl.power,那么它将工作(虽然在解释器的加载和启用电源模式之间有一些延迟),但是如果你运行scala -Dscala.repl.power脚本文件,那么它不会。解释器抱怨找不到intp值。 –
其实我发现了一个丑陋的解决方案:你可以写':power'在一个文件中(我们称之为'init'),然后单独运行scala解释器。然后,执行':load init'(它会切换到电源模式),然后从'load program'执行想要解释字符串的程序。 'intp'变量现在应该是可见的。但是,我会欢迎更漂亮的解决方案:-) –