2012-07-10 35 views
1

爲什麼不能正常工作?Ruby關於循環和字符串相等

puts "Hi" 

x = "stop" 

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

puts "bye" 
+0

刪除你不需要使用'to_s'爲'a.to_s'或'X換行符.to_s',因爲它們都是字符串,並且即使從鍵盤讀取時也會始終存在。 – 2012-07-10 18:53:28

回答

3

因爲gets將包括在任何你輸入到它結束時使用回車鍵。

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" 
+0

非常感謝! – Srathi00 2012-07-15 20:17:56

1

有兩個原因。

第一個equal?是一種非常強大的相等形式:默認情況下,它相當於比較對象id,因此兩個具有相同內容但不是相同對象的字符串將不相等。你可能想使用==代替

其次gets將包括您所鍵入您可以與chopchomp