可能重复:
有没有办法摆脱 IRB 中的“挂起”状态?
我正在使用 IRB。当我编码时,我注意到当行以“”结尾时我被“卡住”了/
:
irb(main):057:0/
发生这种情况时,我无法做任何事情,无法退出,无法定义事物等。它不断循环回到以“ /
”结尾的行。
但是,当一行像这样结束时:
irb(main):056:0>
一切似乎都很好。如果需要,我可以退出,定义任何东西等。
当一行以“”结尾时,我怎样才能解开/
?
可能重复:
有没有办法摆脱 IRB 中的“挂起”状态?
我正在使用 IRB。当我编码时,我注意到当行以“”结尾时我被“卡住”了/
:
irb(main):057:0/
发生这种情况时,我无法做任何事情,无法退出,无法定义事物等。它不断循环回到以“ /
”结尾的行。
但是,当一行像这样结束时:
irb(main):056:0>
一切似乎都很好。如果需要,我可以退出,定义任何东西等。
当一行以“”结尾时,我怎样才能解开/
?
您可以按ctrl+c后跟return以返回 IRB 的提示。
当您在 IRB 中“卡住”时,通常是因为不匹配的结束分隔符,例如单引号不匹配双引号。
对于这个特定问题,这是由于位于 Regexp 对象中,其中分隔符是您按下的“/”。这与拥有一个未关闭的开放式报价在操作上是相同的。一旦你结束正斜杠以关闭正则表达式,你会发现自己在下一个提示符下,你会在光标位置之前的行上看到一些来自 IRB 的返回。因此,简单地关闭分隔符是合适的。
也许,这只能是一次钓鱼探险,你的意思是忽略行尾的返回,而当你应该使用反斜杠('\')时,你使用了正斜杠?
Control-C 有点笨拙,因为它试图发送中断。Control-D 是EOD
或 End of Data *字符,因此通常会让 IRB 知道您已完成在线(或流)上的数据输入。
这不仅仅适用于 IRB,而且可以让您摆脱一些非常困难的地方,而无需终止正在运行的应用程序。允许您优雅地退出,甚至继续运行程序,并纠正您的错误,例如在 IRB 中有时会发生的错误。
当然,如果失败了,那么尝试一下control-c
它可能会很重,足以让你通过。
*:历史上,EOT
或“磁带结束”或“传输结束”。将它与输入流中的“数据”相关联可能只是我的助记符。
这是由于当行以未终止的正则表达式结尾时按 Enter 引起的。您可以像 alex 所说的那样使用 Ctrl+C,或者通过以另一个斜杠结束它来完成正则表达式(或者,如果您以 开始正则表达式,则以%{
结束它}
,等等)