Ruby块和非私有的参数
我提取了简单的例子:
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)} })
我想知道为什么第一页产生:
[1, 2, 3]
当所有的oders都给:
[{:value=>1, :double=>2}, {:value=>2, :double=>4}, {:value=>3, :double=>6}]
我认为这与运营商的优先权有关。 我在哪里可以find很好的解释?
这是因为你在打电话
pp x.map
并传递一个块到pp(忽略它)
正如Ruby编程的书中所解释的那样
大括号具有高优先级; 具有低优先级
所以,实际上,大括号与最接近它们的函数调用(x.map)绑定,而绑定到最远(pp)。 这有点简单,但应该解释这种情况