なぜこれが機能しないのですか?
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で削除できますchopchomp