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),而 do 绑定到最远的函数调用(pp)。这有点简单,但它应该可以解释这种情况

于 2009-01-07T12:39:24.120 回答