Ответ 1
Возможно, идея состоит в том, что вы должны просто работать с ILoop
напрямую? Насколько я могу судить, это не должно быть намного сложнее, чем:
// insert the code below wherever you want a REPL
val repl = new ILoop
repl.settings = new Settings
repl.in = SimpleReader()
repl.createInterpreter()
// bind any local variables that you want to have access to
repl.intp.bind("i", "Int", i)
repl.intp.bind("e", "Exception", e)
// start the interpreter and then close it after you :quit
repl.loop()
repl.closeInterpreter()
По сравнению со старым API breakIf
, этот подход избавляется от дополнительного уровня косвенности как для условия if
(которое было завернуто в => Boolean
), так и в DebugParam
/NamedParam
(которое были временными оболочками, используемыми только для заполнения аргументов bind
).
Этот подход также позволяет вам указать ваш Settings
по мере необходимости. Например, некоторые ошибки REPL можно обрабатывать с помощью -Yrepl-sync
, но break
не дал вам никаких указаний на это.