Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away