10

簡単な例を抽出しました:

require 'pp'
x = 1..3
pp x.map do |i| {:value => i, :double => (i*2)} end
pp x.map { |i| {:value => i, :double => (i*2)} }

pp(x.map do |i| {:value => i, :double => (i*2)} end)
pp(x.map { |i| {:value => i, :double => (i*2)} })

なぜ最初の pp が生成するのか疑問に思っています:

[1, 2, 3]

すべてのオーダーが与えている間:

[{:value=>1, :double=>2}, {:value=>2, :double=>4}, {:value=>3, :double=>6}]

演算子の優先順位と関係があると思います。どこで良い説明を見つけることができますか?

4

1 に答える 1

15

呼んでるからだよ

pp x.map

ブロックを pp に渡します (これは無視されます)。

プログラミングRubyの本で説明されているように

中括弧は優先順位が高いです。do の優先度は低い

したがって、事実上、中括弧は最も近い関数呼び出し (x.map) に結び付けられますが、最も遠い (pp) にバインドされます。少し単純化していますが、この状況を説明する必要があります

于 2009-01-07T12:39:24.120 に答える