From: Masatoshi SEKI Date: 2006-09-11T22:37:23+09:00 Subject: [ruby-dev:29562] Re: symbol and string 咳といいます。 On 2006/09/11, at 10:41, Yukihiro Matsumoto wrote: > |今まで文字列とシンボルが違うことを積極的に使っていたので > |自然にHashのキーにもそれを期待していました。 > > どういう風に「積極的に使って」いましたか? > 参考にしたいので教えてください。 そうですねえ‥ 安くて、名前で区別しやすくて(リテラルそのまま)、ちょっとした 目印に使えるオブジェクトとして使ってました。 なんだかださい例しか見つからなかったんですが、 文字列や、xmlの木を食べるストリームみたいなオブジェクトがあって、 処理した結果を特別なものだけシンボルで返したり stream.each do |it| case it when :cr ... when :begin_element ... else ... end end コントロールブレイク(??)イベントを返したり stream.each do |it| case it when :iteration ... when :status ... when :kind ... else ... end end してました。 んで、そのままArrayに入れたり、whenの代わりにHashを引いたり。 また、属性値の集まりを複数の処理で持ち回すようなときに、 外部から渡って来たそのままの属性値と、それぞれの処理が正規化した後の 値とを区別するのに使ってました。 hash = { "status" => 'open', "イテレーション" => '160', "種類" => 'Story' } とかあるのが、正規化したあとには、 hash = { "status" => 'open', :status => :open "イテレーション" => '160', :iteration => 160, "種類" => 'Story', :card_type => :story } にしておいて、元データはそのままに正規化した値も同時に持ち回すとか。 文字列とシンボルが区別されるLispみたいな感じなのかなあ、と思って そう使っていただけで、これからは変わるんだ、と言われたら頭を切り 替えてつき合っていくことになるんでしょうねえ。