[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...

はじめまして。

12 messages 2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法 — "U.Nakamura" <usa@...> 2009/12/17

こんにちは、なかむら(う)です。

[ruby-list:46629] Re: ブロック付きの sort で元の配列が破壊される

From: SASADA Koichi <ko1@...>
Date: 2009-12-12 01:22:37 UTC
List: ruby-list #46629
 ささだです.

(2009/12/12 9:45), Hideo Konami wrote::
> 次のような現象に出会いました。これらは私の見る限りではリファレン
> スの記述と矛盾していて,しかもまずいことに思えます。
> 
> 
> まず,配列の配列に対するソートをブロック付きソートで行うと,元の
> 配列が破壊されて子配列の一つに置き換えられてしまいます。

 ソートは関係なくて,ブロックローカル変数の問題です.

> irb(main):001:0> a = [[1,6],[2,5],[3,4]]
> => [[1, 6], [2, 5], [3, 4]]
> irb(main):002:0> a.sort
> => [[1, 6], [2, 5], [3, 4]]
> irb(main):003:0> a.sort{|a,b|a[1]<=>b[1]}

 ここで,ローカル変数 a を上書きしています.

 簡単に書くとこんな感じ.ちなみに,1.9 ではこの問題はありません.

a = [1]
a.each{|a|}
p a
  #=> 1.8 では 1
  #=> 1.9 では [1],問題無い

-- 
// SASADA Koichi at atdot dot net

In This Thread

Prev Next