35

我在这里阅读了有关在 REPL 代码中使用该breakIf方法进行交互式调试的信息,但后来我发现这篇文章这么说,breakbreakIfILoopScala 2.10 中删除。不幸的是,该帖子没有解释为什么删除代码。

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

4

1 回答 1

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()

与旧的breakIfAPI 相比,这种方法摆脱了额外的间接级别,用于if条件(被包装到 a 中=> Boolean)和DebugParam/ NamedParam(它们是临时包装器,仅用于填充bind参数)。

这种方法还允许您Settings根据需要指定您的。例如,可以解决一些 REPL 错误,-Yrepl-syncbreak无法指定.

于 2012-11-06T11:44:28.663 回答