木村です。

On Mon, 12 Nov 2007 17:21:54 +0900
"Ohto, Yasunori" <Yasunori.Ohto / jp.sony.com> wrote:

> 最近、ruby に引っ越してきました ^_^
> よろしくお願いいたします m_ _m

よろしく。

> ところで、余談ですが以下の挙動は仕様でしょうか。
> ------
> a=[1,2]
> a.sort	# [1,2]
> a	# [1,2]
> ------
> a=[1,2]
> a.sort{ |a,b| b<=>a }	# [2,1]
> a			# 1 aが破壊されている(これは別に良い(良くない?))
> ------
> a=[1,2]
> a.sort!{ |a,b| b<=>a }	# [2,1]
> a			# 1 "びっくり"を付けても aが破壊されている

仕様といえば仕様、なんですかね。
カラクリはこういうことです。

irb(main):001:0> RUBY_VERSION
=> "1.8.6"
irb(main):002:0> a=[1,2]
=> [1, 2]
irb(main):003:0> a.sort{|x, y| y<=>x}
=> [2, 1]
irb(main):004:0> a
=> [1, 2]
irb(main):005:0> a.sort{|a, b| b<=>a}
=> [2, 1]
irb(main):006:0> a
=> 1
|a, b| というのはブロックにローカルなものを新しく作るわけではない。
ということです。


-- 
木村浩一