バリケンのRuby日記 RSSフィード

2006-05-29

[] シンボル  シンボル - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  シンボル - バリケンのRuby日記  シンボル - バリケンのRuby日記 のブックマークコメント

シンボルは「文字列みたいなもの」だよ。コロンのあとにつづけて文字をかけば、リテラルとしてSymbolクラスオブジェクトなるみたいだよ。たとえば、

a = :hello
puts a.class

とやると、次のようになるよ。

Symbol

「文字列(Stringクラスオブジェクト)」と何が違うのかというと、同じ名前のシンボルは、かならず同じオブジェクトになるよ。たとえば、

puts :hello.object_id
puts :hello.object_id
puts 'hello'.object_id
puts 'hello'.object_id

とやると、実行結果は

4141326
4141326
-605565422
-605569762

となるよ。文字列は毎回オブジェクトを生成しているけど、シンボルは常に同じオブジェクトなのがわかるよね。

予約語変数名、メソッド名なんかは、実はシンボルとして管理されているよ。たとえば

a = :hello

と書いたとき、:helloシンボルだけじゃなくて:aシンボルも内部で生成されているよ。

どんなシンボルが定義されているかは、Linuxならコマンドラインから

$ ruby -e 'Symbol.all_symbols.each_with_index {|x, i| puts "#{i}: #{x}" }' | less

として調べることが出来るよ。ものすごい数のシンボルが最初から定義されているんだねえ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20060529