標準入力からの文字列との比較処理を行ったところ、なぜかうまく行かなかったので
その原因と解決策を備忘録として記載します。
問題点
gets
メソッドは標準入力からの文字列を受け取るためのメソッドです。
このメソッドを利用して取得した入力文字列と別の文字列を比較しようとすると
思い通りの結果が得られませんでした。
input = gets # hogeを入力
bool = (input == 'hoge')
print bool
false
同じ値の文字列同士を比較してるはずなのになぜかfalse
が返ってきました。
原因
調べたところ、どうやらgets
メソッドは標準で末尾に**改行コード(\n)**を追加するみたいです。
input = puts # hogeを入力
p input
"hoge\n"
改行コードが含まれている状態で比較しようとしていたので、比較しても弾かれてたみたいです。
解決策
末尾の改行コードを削除すればよさそうなので調べてみたところ、
そのためのメソッドとしてchomp
メソッドというのがあり、
こちらを利用したら、期待した結果が得られました!
input = gets.chomp # hogeを入力
bool = (input == 'hoge')
print bool
true
補足
chomp
は何かの略称かなと思って調べてみたところ、teratailでの回答が参考になりました。
chompってなんの略?
推測をかなり含んでいますが
もともと、chopというのがあり末尾1文字を消す事ができました。
テキストファイルの末尾は改行で終わるのが(Unixの)マナーだったのでこれで問題なかったのですが
末尾に改行がついてないことや1文字でない環境もあったりと問題になり
「末尾の改行を削除する」関数が追加されchopのmultiline用だからchompになりました。
chop
を末尾1文字から改行コード削除用にしたのが、chomp
メソッドみたいです。
参考