Ruby on Rails -文字列リテラルとシンボル-

RoR特有かどうかは知らんけど、「シンボル」っていうのがある。

記述の仕方は以下の通り。

:action

ちなみに通常の文字列リテラルはシングルクォーテーションで囲む。

'action'

んで、違いなんだけど、シンボルとは一つのオブジェクトを指し続けるマークとのこと。

参考書的には、文字列リテラルがマジックによって定数に変えられたもの、だそう。

よくわからないので、参考にしたサイトでの違いを実践してみた。

コマンドライン上でRubyを書けるirbを使う。

$ irb

■文字列リテラルの場合

1.9.2-p290 :001 > for i in 1..10

1.9.2-p290 :002?> p 'action'.object_id

1.9.2-p290 :003?> end

70117233458100

70117233458020

70117233457980

70117233457940

70117233457900

70117233457860

70117233457820

70117233457760

70117233457700

70117233457660

=> 1..10

このように文字列リテラルだと、出力されるobject_idの値がプログラムで利用するたびに変化する。

つまり、毎回毎回新たなオブジェクトが生成されている、ということになる。

■シンボルの場合

1.9.2-p290 :004 > for i in 1..10

1.9.2-p290 :005?> p :action.object_id

1.9.2-p290 :006?> end

456168

456168

456168

456168

456168

456168

456168

456168

456168

456168

=> 1..10

一方で、シンボルを使うと、毎回object_idが「456168」と不変である。

そんなわけで上手い使いどころはわからんけど、文字列リテラルとシンボルの違いでした。

★追記

「シンボル」とはの良さ気な解説見つけたので貼る。

 >変更できない「文字列のようなもの」

 >変更のためのメソッドを持っていない

 >同値ならば、必ず同一である