Rubyでハッシュをシンボルで定義し、それを引数にして使うときに少し困ったことがあったので記録しておきます。
まずハッシュを定義します。
movie = {title: "example", genre: "something"}
次に単純にmovieの情報をputsする関数を定義します。
引数はハッシュとキーとします。
def movie_info(movie, input)
puts movie[:input]
end
そしてinputにユーザーからの値を代入してmovie_infoを実行します。
input = gets.chomp
movie_info(movie, input)
これでinputにtitleかgenreを入力すればハッシュのバリューが出てくるとおもっていたのですが、例えばここにtitleを入力しても返ってくる値は空白、つまりnilでした。
なぜだろうと思って色々試行錯誤したのですが、どうやらmovie[:input]の「:」のあとの部分は変数として扱わないようです。つまりここの部分ではmovieハッシュのキーがinputの値を指しているということです。
正しく表示しようとすると、このように変更します。
input = gets.chomp #変更前
input = gets.chomp.to_sym #変更後
これでinputの中身がシンボルの形で代入されます。
そしてmovie_infoの中身も変えます。
puts movie[:input] #変更前
puts movie[input] #変更後
これでinputの部分は変数として扱われてシンボル化されたinputの中身(titleかgenre)が入り、正しく値が表示されます。