:pぴー.sendせんど(:pぴー, :pぴー)

mokoaki
mokoriso@gmail.com

2017/07/22

Symbol シンボル

Ruby技術者認定試験の書籍写経メモ

:moko.object_id
=> 1158108

:moko.object_id
=> 1158108

:moko.equal?(:moko)
=> true

何でみんなそんなにシンボルが好きなの?

GC

2.2でシンボルもGCの対象になった。これまでは使われたシンボルはいつまでも残っていた為、もし送信された文字列をシンボル化するシステムがあったとしたら、悪意を持つ人間が大量の文字列を送り込んでメモリの枯渇によりクラッシュの危険も・・みたいな怖い話だったらしい。

定義済みのSymbolオブジェクトを取得する

Symbol.all_symbols
=> 3[....] # 大量の配列が返ってくるので注意

シンボルを使ったり変数を定義したりすると内部で管理されているシンボルが増える

のを実感しよう

Symbol.all_symbols.size
=> 3518

:moko
=> :moko

Symbol.all_symbols.size
=> 3519 # 増えた!

hage = 1
=> 1

Symbol.all_symbols.size
=> 3520 # 増えた! 変数も内部ではシンボルで管理されている

Symbol.all_symbols.last(3)
=> [:irb_exit_org, :moko, :hage]

Symbolオブジェクトに対する文字列を取得する

to_s
id2name
:moko.to_s
=> "moko"

:hage.id2name
=> "hage"