.to_i メソッドは0に帰す
Rubyのプログラムを作っていて、gets.to_i を使ってみて見つけたこと。
while true do puts "[0]レビューを書く" puts "[1]レビューを読む" puts "[2]アプリを終了する" input = gets.to_i if input == 0 then posts = post_review(posts) elsif input == 1 then read_reviews(posts) elsif input == 2 then end_program else exit end
このプログラムで、全角数字を入力したら0番のレビューを書くメソッド(post_review)が起動してしまいました。ちなみに99という全角数字を入力しました。0,1,2意外なので、elseで定義したexitが動いてwhileの繰り返し文から抜け出して欲しかった。
なぜ想定通りに動かなかったのか。
それは.to_i メソッドのデフォルト設定で、半角数字以外のオブジェクトには全て"0"を返すと設定されているからである。
例外ではエラーになるわけじゃないんですね。へぇ〜。
<参考サイト> ありがとうございました。
https://permanent-til-me.ssl-netowl.jp/archives/1626