From: Take_tk Date: 2003-08-22T21:16:03+09:00 Subject: [ruby-list:38186] Re: String << の動作につきまして たけ(tk)です。 [ruby-list:38183] String << の動作につきまして にて kuto@d-itlab.co.jp さん 曰く: > ruby 1.8.0 を使わせていただいております。 > > String の動作についてちょっと疑問があるので質問させてください。 > (もし重複した質問がすでにございましたらすみません) > > ruby 1.8.0 (2003-08-04) [i386-cygwin] > での動作です。 > > (1) % ruby -e "s = ARGV[0]; puts s.frozen?" > false > > (2) % ruby -e "s = ARGV[0]; s << 'hoge'; puts s" foo > -e:1:in `<<': can't modify frozen string (TypeError) > from -e:1 > > (3) % ruby -e "s = ARGV[0]; s += 'hoge'; puts s" foo > foohoge > > -- > という動作になっているのですが、これは仕様でしょうか? > 仕様とすればどういった意図だと解釈すればよろしいですか? > ( (2) の部分の frozen string はどの部分なのかよく分かりません ) これは「Rubyの冒険 旅立ち編」のp.204からp.216の10ページほどかけて説 明した「破壊的メソッド」と「オブジェクトの共有」の問題です。  簡単に言うと、 (1) s = ARGV[0] の時点で、; puts s.frozen?" take_tk = kumagai hidetake