在2.10中替代Scala REPL breakIf

时间:2012-10-17 17:14:46

标签: scala scala-2.10

我正在阅读here关于在REPL代码中使用breakIf方法进行交互式调试,但后来我发现this postbreakbreakIf已从Scala 2.10中的ILoop中删除。不幸的是,该帖子没有解释为什么删除了代码。

我假设这些功能已被删除,因为有更好的方法可以做到这一点。如果是这样的话,有人可以赐教我吗?

1 个答案:

答案 0 :(得分:6)

也许这个想法是你应该直接使用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()

与旧的breakIf API相比,这种方法消除了if条件(包含在=> Boolean中)和{{1}的额外级别的间接方式/ DebugParam(这些是临时包装器,仅用于填充NamedParam参数)。

此方法还允许您根据需要指定bind。例如,some REPL bugs can be worked around with -Yrepl-sync but break gave you no way of specifying that