From: KIMURA Koichi Date: 2007-11-12T18:19:10+09:00 Subject: [ruby-list:44214] Re: はじめまして 木村です。 On Mon, 12 Nov 2007 18:08:58 +0900 Wang Zhoufei wrote: > 王宙飛です。 > はじめまして、よろしくお願いいたします。 よろしくお願いします。 > >irb(main):005:0> a.sort{|a, b| b<=>a} > >=> [2, 1] > >irb(main):006:0> a > >=> 1 > >|a, b| というのはブロックにローカルなものを新しく作るわけではない。 > >ということです。 > aはブロックの外に既に定義されたので、ブロックに引き続き利用されます。 > bはブロックの外に定義されてないので、ブロックのローカル変数として新しく > 定義します。 > > この特性は予想外のこと発生しやすいので、Ruby2.0からやめる可能性がありま > す。 フォローをありがとうございます。 2.0というか、1.9.xで次のようになります。 C:\>irb irb(main):001:0> RUBY_VERSION => "1.9.0" irb(main):002:0> a=[1,2] => [1, 2] irb(main):003:0> a.sort{|a,b| b<=>a} => [2, 1] irb(main):004:0> a => [1, 2] irb(main):005:0> 多分この仕様のままで動かないのではないかと。 なお、 >ruby -we "a=[1,2]; a.sort{|a,b| b<=>a}; p a" -e:1: warning: shadowing outer local variable - a [1, 2] 警告もされるようになります。 -- 木村浩一