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

 ささだです.

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

 ささだです.

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

From: Wang Zhoufei <wangzf@...>
Date: 2007-11-12 09:08:58 UTC
List: ruby-list #44211
王宙飛です。
はじめまして、よろしくお願いいたします。

文中に...

>木村です。
>
>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| というのはブロックにローカルなものを新しく作るわけではない。
>ということです。
aはブロックの外に既に定義されたので、ブロックに引き続き利用されます。
bはブロックの外に定義されてないので、ブロックのローカル変数として新しく
定義します。

この特性は予想外のこと発生しやすいので、Ruby2.0からやめる可能性がありま
す。

>
>
>-- 
>木村浩一


以上です。よろしくお願いいたします。
--------------------------------------------------
NEC Advanced Software Technology(Beijing) Co,.Ltd

王宙飛(Wang Zhoufei)
E-MAIL : wangzf@nec-as.nec.com.cn
TELNET : 800-86-22-382
TEL    : 010-82334433-382


In This Thread