サイトウです。
replyありがとうございます。

On Wed, 8 Dec 1999 03:33:53 +0900
gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:
> i += 10 は i = i+10 なので、i という変数が何を指すかを変えて
> いることになります。絵で描くと以下のような感じ:
> 
> ブロックの実行を始めたところ:
> 
>    a = [1, 2, 3, 4, 5]
>         
>         i
> 
> i += 10 を実行した後:
> 
>    a = [1, 2, 3, 4, 5]
> 
>         i→11

そのとおりですよね。
ルートのメール送って、布団に入ってから気づきました。

> Rubyの変数はオブジェクトを指すだけのもので、変数に対する操作
> は代入(指すものを変えること)と参照しかないので、
>   (1) 添字を使ったイテレータにして、添字で指定したコンテナの
>       位置に代入させるか

はい、これはわかります。
自分の書いた例では、配列のイテレータでした。
しかし、それ以外の任意のオブジェクトの内部実装を表に出さずに、
イテレータブロックの結果をイテレータメソッドで利用したかったのです。

>   (2) 参照しているオブジェクトを変化させる方法をつかうか
> 
>   a = [0,1,2]
>   a.filter{|i| i+10}
>   p a  #=> [10, 11, 12]

あ、これです!
そうか、素直にブロックの戻り値を使えば良かったのか。
うわー。

青山さんのばあい、最初の例ですね。

ありがとうございました。
-----------------------------------
サイトウ ヒロシ
HiroshiSaito / pob.org