[前][次][番号順一覧][スレッド一覧]

learn-ruby-in-kansai:1229

From: Shin'ya Adzumi <adzumi@d...>
Date: Sat, 26 Nov 2005 13:22:25 +0900
Subject: [learn-ruby-in-kansai:1229] Re: シンボルという概念 Re: Rubyについてのnoviceな質問はOK?

あづみです。

やっぱり ruby-list に流したほうが的確な答えが返ってくるんじゃな
いかなとか思いつつ。
別に怖いところじゃないですよ。ときどきパッチが返ってくるぐらい。

クラフトギア 渡辺俊輔 wrote:
> さっそくですが、Symbolという概念が理解しきれず、なんだかもやもやしており
> ます。
> 
> リファレンスを読むと、「文字列と一対一に対応するオブジェクト」と書いてあ
> るのですが、
> 「なぜ普通の変数ではいけないのか? もしかするとSymbolを使うことには、コー
> ドの文脈上何らかの意図を明白にする効果があるのだろうか?」
> という疑問が頭の中で渦巻いて仕方ありません。
> Railsを触っていると、scaffoldを始めERbでも多用されているので、なんとかすっ
> きりしたいと願っています。

文字列と一対一に対応するオブジェクトとは、こういう意味です。

# String
p "abc".id  # => 538370728
p "abc".id  # => 538309996

# Symbol
p :abc.id   # => 4036878
p :abc.id   # => 4036878

文字列の場合、同じ文字列でも、生成するたびに id が変わる
(つまり別オブジェクト)なのに対し、Symbol の方は、同じ文字列で
あれば必ず同じ id(つまり同じオブジェクト)になります。

String でも Symbol でもどっちでもいいような箇所の場合に、
Symbol を使うと、

  * オブジェクトを生成する回数が減る(結果GC回数も減る)
  * String#== よりも Symbol#== の方が早い

こんな感じですかね。なんかもっといろいろあるかも。


安積伸弥
adzumi@d...



--
ML: learn-ruby-in-kansai@r...
使い方: http://QuickML.com/
公式ページ: http://jp.rubyist.net/?KansaiWorkshop
過去ログ: http://www.fdiary.net/ml/learn-ruby-in-kansai/

[前][次][番号順一覧][スレッド一覧]

      1225 2005-11-23 14:43 [nshttsk@g...        ] 復帰 and 懇親会締め切り                 
      1226 2005-11-25 15:07 ┗[craftgear@a...      ] Rubyについてのnoviceな質問はOK?       
      1227 2005-11-25 15:29  ┗[konami@k...         ]                                     
      1228 2005-11-26 01:30   ┗[craftgear@a...      ] シンボルという概念 Re: Rubyについてのnoviceな質問はOK?
->    1229 2005-11-26 05:22    ┣[adzumi@d...         ]                                 
      1230 2005-11-26 07:09    ┃┣[xml@t...            ] 今日は失礼しました            
      1231 2005-11-26 13:21    ┃┗[craftgear@a...      ]                               
      1233 2005-11-26 18:26    ┃ ┗[speakillof@y...     ]                             
      1235 2005-11-27 06:35    ┗[usa@g...            ]                                 
      1238 2005-11-27 16:05     ┗[craftgear@a...      ]