Rubyでコード書いてて大したことじゃないけど見落としててハマった話を。
getsとgets.chompの違いはわかっていたつもりだったけど
getsは改行コードが後ろに入っていて、gets.chompは改行コードが入らない、というのは知っていたつもりだったけど、、、
input = gets
array=['cat','cat1','cat2','cat3','dog','tomcat']
array.each do |a|
puts a.include?(input)
end
とすると、全てfalseで帰ってくる。
冒頭にも書いた通り、getsには改行コードが後ろに入っているので、include?メソッドはcatプラス改行コードで一致するものを探しているので、falseとなるわけです。
input = gets
array=[]
for i in 1..6 do
array_input=gets
array << array_input
end
array.each do |a|
puts a.include?(input)
end
として、配列にcat,cat1,...と前述のコードの配列と同じ要素を順に入力すると最初と最後(catとtomcat)だけtrueで帰ってくる。(これでハマった)
これはfor文で回している部分のgetsで入力した値がcatで終わっているものは最後に改行コードが入るので一致する、ということです。catで終わっていないものは一致しないと認識されています。
解答
input=gets.chompとすれば最初に入力した文字列に改行コードが入らないので意図した結果が得られる。
input = gets.chomp
array=['cat','cat1','cat2','cat3','dog','tomcat']
array.each do |a|
puts a.include?(input)
end