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

learn-ruby-in-kansai:1233

From: speakillof <speakillof@y...>
Date: Sun, 27 Nov 2005 02:26:32 +0900 (JST)
Subject: [learn-ruby-in-kansai:1233] Re: シンボルという概念 Re: Ruby についての novice な質問は OK?

speakillof です。

> つまり、シンボルは文字列の代わりに使えるが、文字列そのものではない・・・とい
> うことでしょうか。
> おかげでシンボルそのものについては理解が深まりましたが、使いどころがよく
> わからないままです。
同じく ruby-list で聞く方が良いと思いますが、
使いどころだけ。

$ ruby -v
ruby 1.8.2 (2004-12-25) [i386-cygwin]

な環境では以下のようになります。

$ time ruby -e "hash = {:abc => 2}; 1000000.times{ hash[:abc] } "

real    0m0.963s
user    0m0.941s
sys     0m0.040s

$ time ruby -e "hash = {'abc' => 2}; 1000000.times{ hash['abc'] } "

real    0m1.666s
user    0m1.642s
sys     0m0.030s

つまり、Hash のキーに使う時には文字列よりも Symbol の方が高速です。
私の場合、実利的に意味があって Symbol を使うのはこの時くらいでしょうか。

> う〜〜〜ん、とりあえず、シンボル≒文字列 という理解で、いろいろな参考書や
> ソースコードを読んで理解を深めてみたいと思います。
Ruby の組み込みクラスではClass や Module のインスタンスメソッドで
Symbol が良く使われますね。
特に Module#attr_* 系

具体的には

class Hoge
  attr_accessor :hoge, :foo
end

という例です。
Rails の scaffold で Symbol を使うのは attr_* 系に
使い方が近いからでしょう。

# 多分。いや、Rails 使ってないから分からないけど。

他に Rails には Python の名前付き引数みたいして使うこともあった気が…
自分で定義するときはこんな感じ。

irb(main):006:0> def hoge(a, b, c, *d)
irb(main):007:1> p d
irb(main):008:1> end
=> nil
irb(main):009:0> hoge(1,2,3, :a=>3, :b=>4)
[{:a=>3, :b=>4}]
=> nil

# Ruby の内部では Symbol は Fixnum と一緒とか、大量に使うと
# GC されなくて困るとかそういう話もあったような無かったような。
# 識者の方、お願いします。


--------------------------------------
STOP HIV/AIDS.
Yahoo! JAPAN Redribbon Campaign 2005
http://pr.mail.yahoo.co.jp/redribbon/

--
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...      ]