2

每当我不小心在 IRB 中输入了错误的语法时,我就永远无法回头修复它,它不断地提供新的命令行。

例如:

1.9.3p194 :035> justin.find{|key,value|key=='phone_number
1.9.3p194 :036> justin.find{|key,value|key=='phone_number'}
1.9.3p194 :037>
1.9.3p194 :038>
1.9.3p194 :039>

在我修正了语法中的错字后,如示例中的 :036 行所示,它不会执行该方法。

4

3 回答 3

6

每个人都指出了原因,没有人回答这个问题。

使用Control + C结束错误的行。

当然,如果不执行,它就会有错误。

进入新行后,您可以使用向上键在历史记录中搜索以进行编辑。

顺便说一句,奇怪的是你 irb 没有以任何方式告诉你你的行没有被执行:

如您所见,我的 irb 提示输入特殊字符以结束命令(可能如果我有多个括号/引号等,它将指向第一个:

irb(main):001:0> justin.find{|key,value|key=='phone_number
irb(main):002:1' ^C

   (Up Key)

irb(main):002:0> justin.find{|key,value|key=='phone_number'
irb(main):003:1>

Windows 版本 (ruby 1.9.3p327 (2012-11-10) [i386-mingw32] 我在工作中得到了什么 :( ) 但我确定我在 Gentoo 和 Suse 中得到了类似的东西

编辑:

来自右侧的相关帖子。您可以获得更好的提示传递作为选项

irb --prompt inf-ruby

如何获得“irb(main):001:0>”提示而不是“>>”

于 2013-01-08T09:49:32.280 回答
1

忽略此答案中堆栈溢出的语法突出显示。这是误导。

线

justin.find{|key,value|key=='phone_number

包含以 . 开头的多行字符串的开头phone_number。由于你还没有完成它——通过输入第二个'——IRB 礼貌地等待你完成字符串。进入

justin.find{|key,value|key=='phone_number'}

因为第二行导致完成您已经开始的字符串,输入方法调用或局部变量phone_number,然后添加另一个字符串的开头,现在以}. 此时 IRB 看到的代码看起来像

justin.find{|key,value|key=="phone_number\njustin.find{|key,value|key=="phone_number'}

它还没有完成——因为最后一个字符串没有终止——所以 IRB 等待更多的输入。

随后的每一个

justin.find{|key,value|key=='phone_number'}

让你留在这个循环中。

Ruby 不会打断你并告诉你有语法错误。原因是 IRB 以每条线¹为基础运作,而您在技术上还没有完成这条线。实际上,表达式中的字符串中有换行符,但代码中没有换行符会导致表达式终止。

现在我希望你的问题的答案是显而易见的。为了让 IRB 退出循环,请输入

'

¹每个表达式会更精确,但在此答案的上下文中,每行是令人满意的。

于 2013-01-08T09:10:37.877 回答
-1

我在行号后面有一个撇号:

1.8.6 :200 > justin.find{|key,value|key=='phone_number
1.8.6 :201'> 

看看您是否可以配置提示,以便您了解 IRB 在继续语句的情况下期望什么。另请参阅什么是“如果/除非”等

于 2013-01-08T11:03:34.003 回答