以编程方式中断REPL ILoop

时间:2011-12-01 11:37:00

标签: scala

我有一个使用重构的2.9.x类的scala REPL api(ILoop等...)的包装器。

这很有效。

因为这是一个发给用户的工具,用户可能会输入类似的内容:

while(-1 < 1) {}

用户如何突破当前正在执行的代码?

其他帖子谈论

<ctrl> + <c> 

在适当的键绑定下在某些平台上工作。

检查scala REPL api和任何可用的文档,不知道如何实际实现它。

1 个答案:

答案 0 :(得分:1)

查看文件ILoopInit.scalaScala 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。