2015-01-02 4 views
2

О персонализировать Scala REPL для внутреннего DSL, от create-your-custom-scala-replScala РЕПЛ персонализация для внутреннего DSL

import scala.tools.nsc.Settings 
import scala.tools.nsc.interpreter.ILoop 

object TestConsole extends App { 
    val settings = new Settings 
    settings.usejavacp.value = true 
    settings.deprecation.value = true 

    new SampleILoop().process(settings) 
} 

class SampleILoop extends ILoop { 
    override def prompt = "myDSL $ " 

    addThunk { 
    intp.beQuietDuring { 
     intp.addImports("my.dsl._") 
    } 
    } 
} 

заметил, что addThunk не поддерживается в 2.11. *.

Таким образом, как загрузить myDSL.jar или import my.dsl._ в персонализированный REPL?

ответ

3

Вы можете вставить код инициализации в файле, аналогично "-i":

import scala.tools.nsc.Settings 
import scala.tools.nsc.interpreter.ILoop 

object TestConsole extends App { 
    val settings = new Settings 
    settings.usejavacp.value = true 
    settings.deprecation.value = true 

    new sys.SystemProperties += ("scala.repl.autoruncode" -> "myrepl.init") 

    new SampleILoop().process(settings) 
} 

class SampleILoop extends ILoop { 
    override def prompt = "myDSL $ " 
} 

Или:

object TestConsole extends App { 
    val settings = new Settings 
    settings.usejavacp.value = true 
    settings.deprecation.value = true 

    new sys.SystemProperties += (
    "scala.repl.autoruncode" -> "myrepl.init", 
    "scala.shell.prompt" -> "myDSL $ " 
) 

    new scala.tools.nsc.interpreter.ILoop process settings 
} 
+0

Большое спасибо; как бы содержимое 'myrepl.init' было заменено' intp.addImports ("my.dsl ._") '? – elm

+0

Каждая строка файла запускается как 'intp.interpret'; похоже, что эти команды автозапуска идут в истории команд. –

+0

Пробная команда 'scala TestConsole.jar -cp myDSL.jar'; также в 'myrepl.init' добавлен' import my.dsl._' еще не смог получить классы, связанные с DSL ... – elm