Ruby のシンボル
この前、頂いた本で Rails の勉強をしているのだが、よく出てくるシンボルがいまいちよく分からない。
たとえば、Rails で
id = @params[:id]
とすると、パラメータ id の値が取れるけど
id = @params["id"]
でも取れる。ということは 「:id」も「"id"」も同じかと思って
p :id == "id" # => false
となった。ここでもう一度、Rubyリファレンスマニュアルの Symbol を見てみると
リテラルでシンボルを表す場合、`:' の後には識別子、メソッド名・・・
と書いてある。そうか、:id は Symbol オブジェクトのリテラルだったんだな。だから String オブジェクトである「"id"」とは同じではないのはあたりまえだ。ということは to_s すると同じかと思い確かめてみた。
p :id.to_s == "id" # => true
予測どおり true になった。Symbol が中で持ってる文字列は、この場合は id になるのかも知れない。
ここで、もうひとつ。普通の Hash でシンボルを使ってみた。すると
h = { :id => "value" } p h[:id] # => value p h["id"] # => nil
となって、"id"をキーにすると nil になる。
Rails で @param[:id] と @param["id"] で同じ値が取れるのは Rails がいろいろうまくやってくれてるからなのか?