【问题标题】:Ruby block and unparenthesized argumentsRuby 块和不带括号的参数
【发布时间】:2010-09-30 00:39:18
【问题描述】:

我提取了简单的例子:

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}]

我认为它与运算符优先级有关。我在哪里可以找到好的解释?

【问题讨论】:

标签: ruby parentheses


【解决方案1】:

因为你在打电话

pp x.map

并将块传递给 pp(忽略它)

Programming Ruby 书中所述

大括号具有高优先级; do 优先级低

因此,有效地,大括号绑定到离它们最近的函数调用(x.map),而 do 绑定到最远的函数调用(pp)。这有点简单,但应该可以解释这种情况

【讨论】:

  • 谢谢@Gareth,你知道任何正式的参考资料吗?一些语言规范等?
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 2015-07-30
  • 2019-07-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
相关资源
最近更新 更多