原です。

In message "[ruby-list:13402] Re: constant/immutable(Re: Ruby and LISP)"
    on 99/04/07, Shugo Maeda <shugo / netlab.co.jp> writes:
|
|前田です。
|
|At Wed, 7 Apr 1999 17:54:26 +0900,
|Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> wrote:
|> | String s = new String("Hello");
|> | s += " World";
|> |
|> |がOKなのはコンパイラの最適化のせいではなくて、+=がオブジェクトの
|> |状態を変える操作ではなく変数に対する操作だからだと思うんですけど。
|> 
|> その記事は今手元にないのですが、岩谷氏は += を破壊的なメ
|> ソッド、+ はオブジェクトを複製して += する、というふうに
|> 「+ が += から派生している」と考えているのかな。
|
|記事を要約すると、Stringはimmutableなのに上記のようなことが可能な
|のは、+による文字列の連結がコンパイル時に行われるからだ、というよ
|うな内容です。

あ、String は immutable でしたね。忘れてかけていた。

|最初は単に+=をRubyのconcatのようなものと勘違いされているのかなと
|思ったのですが、immutableの意味を「変更不可能=実質定数」と説明さ
|れているので、ひょっとして両者を区別されていないのかも、とか思っ
|たりします。
|# 杞憂であってほしいですが。

それ、あり得ますね。(^^;

+= がメソッドでなくて代入であることは強調したいところですね。