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