Рубин О циклах и равенстве строк
Почему это не работает?
puts "Hi"
x = "stop"
loop do
a = STDIN.gets
break if a.to_s.downcase.equal?x.to_s
end
puts "bye"
2 ответа
Решение
Так как 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"
Есть две причины.
Первый equal?
это очень сильная форма равенства: по умолчанию это эквивалентно сравнению идентификаторов объектов, поэтому две строки, имеющие одинаковое содержимое, но не одинаковые объекты, не будут равны. Вы, вероятно, хотите использовать ==
вместо
во-вторых gets
будет включать новую строку, которую вы ввели, которую вы можете удалить chop
или же chomp