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

理由は 2 つあります。

1equal?つ目は、非常に強力な形式の等価性です。デフォルトでは、オブジェクト ID を比較するのと同じです。したがって、同じ内容を持つが同じオブジェクトではない 2 つの文字列は等しくありません。==おそらく代わりに使用したいでしょう

次に、入力した改行が含まれます。これは、またはgetsで削除できますchopchomp

于 2012-07-10T16:24:40.210 に答える