Ruby块和未细化的参数
我摘录了一个简单的例子:Ruby块和未细化的参数,ruby,parentheses,Ruby,Parentheses,我摘录了一个简单的例子: 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 =&
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)} })
我想知道为什么first pp生产:
[1, 2, 3]
当所有的奥德人都在奉献:
[{:value=>1, :double=>2}, {:value=>2, :double=>4}, {:value=>3, :double=>6}]
我想这与运算符优先级有关。我在哪里能找到好的解释呢?因为你打电话来了
pp x.map
并将一个块传递给pp(pp会忽略它)
正如书中所解释的
大括号具有较高的优先级;do的优先级较低
因此,实际上,大括号绑定到离它们最近的函数调用(x.map),而do绑定到最远的函数调用(pp)。这有点简单,但应该可以解释这种情况谢谢@Gareth,你知道任何正式的参考资料吗?一些语言规范等?这是使用Ruby-2.2.0的pry会话、和部分的副本。pp|u hash=x.map do|i |{:value=>i,:double=>i*2}end=>1,:double=>2,{:value=>2,:double=>4},{:value=>3,:double=>6}pp|hash.join(“,”{:value=>1,:double=>2,{:value=>2,:double=>4},{:value=>3,:double=>6}”在今天的Json使用中,这可能更可取,但这只是读取输出的风格问题。有时,只要代码能够处理正确的类型,传递哪一个并不重要。pp_hash=pp_hash.join(“,”)这是我在开始切线之前真正得到的。这是pry中的第一部分。。。。[53]pry(main)>pp x.map do|i |{:key=>i,:value=>(i*2)}end |=>#