我想動態地將一個字符串解釋爲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'變量現在應該是可見的。但是,我會歡迎更漂亮的解決方案:-) –