LoginSignup
2
2

More than 5 years have passed since last update.

ハッシュをシンボルで定義し、引数として使うときの注意点

Posted at

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)が入り、正しく値が表示されます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2