我有一个使用重构的2.9.x类的scala REPL api(ILoop等...)的包装器。
这很有效。
因为这是一个发给用户的工具,用户可能会输入类似的内容:
while(-1 < 1) {}
用户如何突破当前正在执行的代码?
其他帖子谈论
<ctrl> + <c>
在适当的键绑定下在某些平台上工作。
检查scala REPL api和任何可用的文档,不知道如何实际实现它。
答案 0 :(得分:1)
查看文件ILoopInit.scala
中Scala REPL does it的方式。在那里安装了以下信号中断处理程序,
protected def installSigIntHandler() {
// ....
SignalManager("INT") = {
if (intp == null || intp.lineManager == null)
onExit()
else if (intp.lineManager.running)
intp.lineManager.cancel()
// ...
}
}
请注意,字段intp: IMain
是在ILoop
类中定义的,这是ILoopInit
的自我类型。
总结一下:在你的SIGINT处理程序中,你可以用intp.lineManager.cancel
中断REPL。