如何在Ruby irb中解除卡住?

5
可能是重复问题:有没有办法从IRB的“挂起”状态中恢复? 我正在使用IRB, 在编码时,当一行以"/"结束时,我发现自己会“卡住”。
irb(main):057:0/

当发生这种情况时,我无法做任何事情,无法退出、定义内容等,它会不断地循环回到以"/"结尾的行。
但是,当一行以这样的方式结束:
irb(main):056:0>

一切似乎都正常工作。我可以在需要时退出,定义任何内容等。

当一行以“/”结尾时,我该如何解决卡住的问题?


1
好问题,我通常只是杀掉进程 :x 另外,恭喜。 - Joseph Yaduvanshi
3个回答

8
您可以按下 ctrl + c,然后再按 return,以返回 IRB 的提示符。

请确保接受Alex的答案。 - Nick Messick

5
当您在IRB中“卡住”时,通常是由于未匹配的关闭分隔符,例如单引号与双引号不匹配。
对于这个特定的问题,它是由于处于Regexp对象中,其分隔符是您按下的'/'。这与具有未关闭引号的开放引号相同。一旦您结束正斜杠以关闭Regexp,您将发现自己在下一个提示符上,并且您将在光标位置之前的行上看到IRB的返回值。因此,只需简单地关闭分隔符即可。
也许,这只能是一次钓鱼远足,您可能意味着忽略行末的回车,而当您应该使用反斜杠('\)时,您使用了正斜杠?
Control-C有点过分,因为它试图发送中断信号。Control-D是EOD或数据结束字符,因此通常会让IRB知道您已完成输入行(或流)。
这不仅适用于IRB,还可以让您在不终止正在运行的应用程序的情况下从一些非常困难的位置中脱身。这使您能够优雅地退出,甚至继续运行程序并纠正错误,例如在IRB中有时会发生的情况。

Screenshot of situation where missing one of the parenthesis are missing.

当然,如果那样做失败了,那么尝试使用 control-c,这很可能会足够强硬,让你成功。
*: 历史上, EOT 或 "End of Tape" 或 "End of Transmission"。这可能只是我将其与输入流中的“数据”相关联的记忆方法。

2

这是由于当行以未终止的正则表达式结尾时按下Enter键引起的。您可以像Alex建议的那样使用Ctrl+C,或者通过添加另一个正斜杠来完成正则表达式(如果您用%{开头,则用}结尾等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接