为了账号安全,请及时绑定邮箱和手机立即绑定

Ruby块和不带括号的参数

Ruby块和不带括号的参数

泛舟湖上清波郎朗 2019-08-28 15:30:09
Ruby块和不带括号的参数我提取了简单的例子:require 'pp'x = 1..3pp x.map do |i| {:value => i, :double => (i*2)} endpp 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}]我认为它与运算符优先级有关。我在哪里可以找到好的解释?
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

这是因为你在打电话

pp x.map

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

正如编程Ruby书中所解释的那样

大括号具有很高的优先级; 确实有一个低优先级

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

查看完整回答
反对 回复 2019-08-28
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

在此帖子中使用Ruby-2.2.0的pry会话的部分日期。pp_hash = x.map do | i | {:value => i,:double =>(i * 2)} end => [{:value => 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(“,”)

查看完整回答
反对 回复 2019-08-28
  • 2 回答
  • 0 关注
  • 574 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信