あるクラスの中にハッシュがあって、そのキーをシンボルにしてたんだけど、そのシンボルをクラス外から使えるのかなと思って使ってみたら普通に使えた。
わかってるひとからすれば当然のことなんだろうけど、型定義のある言語しかやってこなかったひとからすると定義とかインスタンス作らなくても書いたらすぐ使えるというのが意味がわからない。
http://doc.ruby-lang.org/ja/1.9.3/class/Symbol.html
ざっくり言うとObjectクラスにUniqueなObject(シンボル)を追加していくって感じなのかなあ。
要は同じシンボルは1つしかなくて、そのシンボルは定義って言うのがあってるかわからないけど使いさえすればどこでも使えるしどこで使っても同じ値が参照されるってことかな。
サンプルみて試してみる。
[1] pry(main)> :inoki => :inoki [2] pry(main)> Symbol.all_symbols.select{|sym|sym.to_s.include? 'inoki'} => [:inoki] [3] pry(main)> Symbol.all_symbols.select{|sym|sym.to_s.include? 'misawa'} => [] [4] pry(main)> "misawa".intern => :misawa [5] pry(main)> Symbol.all_symbols.select{|sym|sym.to_s.include? 'misawa'} => [:misawa] [6] pry(main)> :aaa => :aaa [7] pry(main)> :aabc => :aabc [8] pry(main)> Symbol.all_symbols.select{|sym|sym.to_s.include? 'aa'} => [:aaa, :aabc]
シンボルとして使うだけでまじで作られてる。
すごい勉強になる。