« Excelでマクロ使ってみてるけど、使い物にならねーので、いろいろとメソッドを追加していかねばならない。ぐはっ。 | トップページ | 複数人で同じエクセルファイルをつつくと思わぬ事故にあうので、変更されたら勝手にバックアップを作っていくようなマクロを作った。あちこちのサイトを参考にさせて頂きました。 »

ruby-list:47543のブロックの話題。なるほど。あんまり意識したことないけど意識しないとはまりますね。

> しかし、pメソッドを実行するタイミングによって、
> [[2, 8], [6, 7], [9, 3]]
> という結果が返ってきます。
>
> このような結果になる理由がわからないのですが、
> ご教示いただけないでしょうか。

代入やメソッド呼び出しと、ブロック(特にdo~end)の結合強度の関係ですね。

ブロックを{}に変えて書きますが、それぞれ、

> *ソース
> puts "#-------------------------------------"
> p [[9,3],[2,8],[6,7]].sort do |i,j|
>   i[1] <=> j[1]
> end

p([[9,3],[2,8],[6,7]].sort){...}

> puts "#-------------------------------------"
> p a = [[9,3],[2,8],[6,7]].sort do |i,j|
>   i[1] <=> j[1]
> end
> p a

p(a = [[9,3],[2,8],[6,7]].sort){...}

> puts "#-------------------------------------"
> a = [[9,3],[2,8],[6,7]].sort do |i,j|
>   i[1] <=> j[1]
> end
> p a

a = [[9,3],[2,8],[6,7]].sort{...}
p a

と解釈されていて、上の二つではブロックなしの Array#sort の結果が p に渡
され、ブロックは無視されています。Array#sort は要素が配列だとその最初の
要素から比較するので、[[2, 8], [6, 7], [9, 3]] となっています。

ちなみに、この様な場合は sort_by を使うのがよいと思います。

>> [[9,3],[2,8],[6,7]].sort_by{|a| a[1]}
=> [[9, 3], [6, 7], [2, 8]]

« Excelでマクロ使ってみてるけど、使い物にならねーので、いろいろとメソッドを追加していかねばならない。ぐはっ。 | トップページ | 複数人で同じエクセルファイルをつつくと思わぬ事故にあうので、変更されたら勝手にバックアップを作っていくようなマクロを作った。あちこちのサイトを参考にさせて頂きました。 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/561999/49728375

この記事へのトラックバック一覧です: ruby-list:47543のブロックの話題。なるほど。あんまり意識したことないけど意識しないとはまりますね。:

« Excelでマクロ使ってみてるけど、使い物にならねーので、いろいろとメソッドを追加していかねばならない。ぐはっ。 | トップページ | 複数人で同じエクセルファイルをつつくと思わぬ事故にあうので、変更されたら勝手にバックアップを作っていくようなマクロを作った。あちこちのサイトを参考にさせて頂きました。 »

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

最近の記事

最近のコメント

最近のトラックバック

無料ブログはココログ