なぜこれが機能しないのですか?
puts "Hi"
x = "stop"
loop do
a = STDIN.gets
break if a.to_s.downcase.equal?x.to_s
end
puts "bye"
なぜこれが機能しないのですか?
puts "Hi"
x = "stop"
loop do
a = STDIN.gets
break if a.to_s.downcase.equal?x.to_s
end
puts "bye"
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"
理由は 2 つあります。
1equal?
つ目は、非常に強力な形式の等価性です。デフォルトでは、オブジェクト ID を比較するのと同じです。したがって、同じ内容を持つが同じオブジェクトではない 2 つの文字列は等しくありません。==
おそらく代わりに使用したいでしょう
次に、入力した改行が含まれます。これは、またはgets
で削除できますchop
chomp