输入特定输入时中断循环

时间:2013-05-09 07:06:24

标签: ruby compare ruby-2.0

当输入为42时,我试图暂停用户的输入。

我正在处理的网站上的正确答案是:

while line = gets   
  break if (/42/ =~ line)
  x << line 
end

我尝试过的代码不起作用:

while line = gets.chomp
  break if (line == 42)
  x << line 
end

为什么会这样?我错过了我在if声明中可以使用的限制吗?

4 个答案:

答案 0 :(得分:2)

问题是42是一个整数,但line是一个字符串:

1.9.3p392 :001 > "42" == 42
 => false

所以从来没有你的if语句被触发,因为它正在比较两种不同的东西。与正则表达式匹配修复它,虽然它正在寻找“42”出现在输入的任何地方(例如“3427”)。我想你的意思是

while line = gets.chomp
    break if (line == "42")
    x << line 
end

换句话说,当输入是一个字符串为4和2的字符串时,断开。

答案 1 :(得分:0)

<<AppendArray类对象上的方法(String)。但是你的x没有对这些对象进行任何引用。因此,您将获得undefined local variable or method 'x' for main:Object (NameError)

尝试此操作(通过修复局部变量x来保存实际对象并将line值转换为Fixnum对象:

x = "hi"
while line = gets.chomp
  break if (line.to_i == 42)
  x << line 
end

此计划将为您to halt input from a user when their input is 42提供帮助。

答案 2 :(得分:0)

我怀疑是因为你正在将数字与字符串进行比较。该示例使用它出现的正则表达式。 “42”== 42会在红宝石中给你假。

答案 3 :(得分:0)

until (line = gets.chomp).to_i == 42   
  x << line 
end

这当然会绕过你所询问的if语句。

你对if的限制完全基于你将一个字符串永远是一个字符串与一个数字进行比较的事实,而这永远不会相等。 (正如其他人所说)

所以我们必须重新考虑条件陈述。在这种情况下,我认为它不合适#34;并将比较移动到&#39;而#39;循环,然后将其反转为&#39;直到&#39;声明,能够积极地表达结束循环的条件。每当我看到一个“休息”时间。在循环中,我试图摆脱那种气味,因为如果可能的话,离开循环的条件应该在循环条件中表达。

我希望这会有所帮助。