1

为什么这不起作用?

puts "Hi"

x = "stop"

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

puts "bye"
4

2 回答 2

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"
于 2012-07-10T16:22:24.313 回答
1

有两个原因。

首先equal?是一种非常强的相等形式:默认情况下,它等同于比较对象 id,因此具有相同内容但不是同一个对象的两个字符串将不相等。您可能想==改用

其次gets将包括您输入的换行符,您可以使用chop或删除该换行符chomp

于 2012-07-10T16:24:40.210 回答