Problem
You want to get a string containing the label of a Ruby symbol, or get the Ruby symbol that corresponds to a given string.
シンボルから文字列、文字列からシンボルを取得。
Solution
- シンボルから文字列を取得するにはSymbol#to_s、またはそのエイリアスSymbol#id2nameを使う。
puts :symbol.to_s # => symbol puts :symbol2.id2name # => symbol2
- 文字列からシンボルを取得するには String#intern を使う。
:symbol symbol = 'symbol' puts symbol.intern # => :symbol
memo
というかまずシンボルのイメージがよくつかめていない。
シンボルは任意の文字列と一対一に対応するオブジェクト
文字列は中身が同じ文字列でも作るたびに異なるオブジェクトが生成される。
それに対し、シンボルの場合は一度作られたら同じオブジェクトを差し続けるもの。
ということでこうなる。
puts 'abc'.object_id == 'abc'.object_id # => false
puts :abc.object_id == :abc.object_id # => true
#object_idはObject#object_idでその名の通り、各オブジェクトのID。
各オブジェクトに対して一意な整数を返す。
オブジェックとの中身、文字列の中身が大事なときは文字列を使い、
オブジェクト自体、どのオブジェクトをさすものかが胎児な時は、シンボルを使うべき。