5

可能重复:
有没有办法摆脱 IRB 中的“挂起”状态?

我正在使用 IRB。当我编码时,我注意到当行以“”结尾时我被“卡住”了/

irb(main):057:0/

发生这种情况时,我无法做任何事情,无法退出,无法定义事物等。它不断循环回到以“ /”结尾的行。

但是,当一行像这样结束时:

irb(main):056:0>

一切似乎都很好。如果需要,我可以退出,定义任何东西等。

当一行以“”结尾时,我怎样才能解开/

4

3 回答 3

8

您可以按ctrl+c后跟return以返回 IRB 的提示。

于 2012-11-06T23:11:47.490 回答
5

当您在 IRB 中“卡住”时,通常是因为不匹配的结束分隔符,例如单引号不匹配双引号。

对于这个特定问题,这是由于位于 Regexp 对象中,其中分隔符是您按下的“/”。这与拥有一个未关闭的开放式报价在操作上是相同的。一旦你结束正斜杠以关闭正则表达式,你会发现自己在下一个提示符下,你会在光标位置之前的行上看到一些来自 IRB 的返回。因此,简单地关闭分隔符是合适的。

也许,这只能是一次钓鱼探险,你的意思是忽略行尾的返回,而当你应该使用反斜杠('\')时,你使用了正斜杠?

Control-C 有点笨拙,因为它试图发送中断。Control-D 是EOD或 End of Data *字符,因此通常会让 IRB 知道您已完成在线(或流)上的数据输入。

这不仅仅适用于 IRB,而且可以让您摆脱一些非常困难的地方,而无需终止正在运行的应用程序。允许您优雅地退出,甚至继续运行程序,并纠正您的错误,例如在 IRB 中有时会发生的错误。

缺少括号之一的情况的屏幕截图。

当然,如果失败了,那么尝试一下control-c它可能会很重,足以让你通过。


*历史上EOT或“磁带结束”或“传输结束”。将它与输入流中的“数据”相关联可能只是我的助记符。

于 2012-11-07T00:20:21.003 回答
2

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

于 2012-11-07T00:12:04.443 回答