rubyの基礎(6)シンボル
rubyにはシンボルという概念があります。変数のように使いますが、先頭にコロン(:)をつけて書くとシンボルというオブジェクトです。
irb> :s.class
=> Symbol
例えば文字列 "foo" とシンボル :foo は別物のオブジェクトです。
"foo" は mutable(可変)なString オブジェクト
:foo は immutable(不変)なSymbol オブジェクト
これを混同すると、Hashでの値の取得で間違えることになります。
# 文字列でキーを定義
irb> hash = {'key' => 'value'}
=> {"key" => "value"}
# 文字列"key"で値を取得
irb> hash['key']
=> "value"
# シンボルでは値を取得できない(:keyというキーは存在しないから)
irb> hash[:key]
=> nil
# シンボルでキーを作ってみると、
irb> hash = {:key=>"value"}
=> {:key=>"value"}
irb> hash[:key]
=> "value"
文字列とシンボルはそれぞれ to_sym, to_s メソッドで相互に変換可能です。
irb> "foo".to_sym
=> :foo
irb> :foo.to_s
=> "foo"
シンボルは言わば文字列の皮を被った数値と言えます。シンボルでのアクセスはruby内部の処理系に直接アクセスできるため速度が速いです。
rubyはメソッドや変数は内部的にシンボルで管理しているのです。
ちなみにハッシュは、
irb> {'a':1}
=> {:a=>1}
irb> {a:1}
=> {:a=>1}
文字: 値 と書くと、 シンボル(キー)=> 値 に解釈されます。
この記事が気に入ったらサポートをしてみませんか?