Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby块和未细化的参数_Ruby_Parentheses - Fatal编程技术网

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 |=>#