Ruby关于循环和字符串相等

时间:2012-07-10 16:16:28

标签: ruby loops string-evaluation

为什么这不起作用?

puts "Hi"

x = "stop"

loop do
  a = STDIN.gets
  break if a.to_s.downcase.equal?x.to_s
end

puts "bye"

2 个答案:

答案 0 :(得分:3)

因为gets将包含在您键入内容的末尾使用的Enter键。

a = gets # I type in "stop"
a == "stop\n" #=> true

为了解决此问题,chop关闭换行符

puts "Hi"

x = "stop"

loop do
  a = STDIN.gets.chop
  break if a.to_s.downcase == x.to_s
end

puts "bye"

答案 1 :(得分:1)

有两个原因。

第一个equal?是一种非常强大的相等形式:默认情况下,它等同于比较对象ID,因此具有相同内容但不是同一个对象的两个字符串将不相等。您可能希望使用==代替

其次gets将包含您输入的换行符,您可以使用chopchomp

删除该换行符