[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>

 ささだです.

16 messages 2007/11/17
[#44241] Re: Float を利用するRubyプログラム — SASADA Koichi <ko1@...> 2007/11/19

 ささだです.

[ruby-list:44214] Re: はじめまして

From: KIMURA Koichi <kimura.koichi@...>
Date: 2007-11-12 09:19:10 UTC
List: ruby-list #44214
木村です。

On Mon, 12 Nov 2007 18:08:58 +0900
Wang Zhoufei <wangzf@nec-as.nec.com.cn> 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]

警告もされるようになります。


-- 
木村浩一


In This Thread