.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