シンボル
書式
:シンボル名
任意の文字列と一対一に対応するオブジェクト
文字列の代用もできるが文字列と同じ振る舞いをするとは限らない
同じ内容のシンボルは必ず同一オブジェクト
例
:symbol
p "abc" == "abc" #=> true
p "abc".equal?("abc") #=> false
p :abc == :abc #=> true
p :abc.equal?(:abc) #=> true ←同値ならば同一
文字列は同一でも異なるオブジェクトとなる。
シンボルは同一の場合同じオブジェクトとなる。
シンボルは内部では整数として扱われており高速で処理することができメモリ効率がよい。
用途
ハッシュのキー { :key => "value" } { key: "value" }
アクセサの引数で渡すインスタンス変数名 attr_reader :name
メソッド引数で渡すメソッド名 __send__ :to_s
C の enum 的な使用 (値そのものは無視してよい場合)
メリット
新しく文字列を生成しない分やや効率がよく、比較も高速
文字の意味がはっきりするのでコードが読みやすくなる
immutable なので内容を書き換えられる心配がない
fruits = { :apple => "りんご", :banana => "バナナ" }
# シンボルを使って値を取り出す(文字列よりも高速)
fruits[:apple] #=> "りんご"