青木です。

  In mail "[ruby-list:38183] String << の動作につきまして"
    kuto / d-itlab.co.jp wrote:

> うと と申します。

> 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

> という動作になっているのですが、これは仕様でしょうか?
> 仕様とすればどういった意図だと解釈すればよろしいですか?
> ( (2) の部分の frozen string はどの部分なのかよく分かりません )

1.8 からは ARGV の中身が freeze されるようになったので
(2) で正しい動作なんです。(1) で false になるのは、コマンド
ライン引数を与えていないから (nil.frozen? になっているから) ですね。
-------------------------------------------------------------------
青木峰郎