Ruby中 do/end和大括号的区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (89)

为什么这个映射表达式使用大括号还是do / end时产生不同的结果?

a = [1,2,3,4,5]


p a.map { |n|
    n*2
}  
#=> [2,4,6,8,10]


p a.map do |n|
    n*2
end  
#=> [1,2,3,4,5]
提问于
用户回答回答于

这是因为第二行被解释为:

p(a.map) do ... end

而不是:

p(a.map do ... end)

用户回答回答于

这与{字符和do关键字的关联性的差异有关。

在第一种情况下,块被解释为map函数的块参数。map函数的结果是该函数的参数p

在第二种情况下,块被解释为p函数的块参数,而a.map解释为p函数的第一个参数。由于a.map计算结果为a,这会打印原始数组。在这种情况下,块被有效地忽略。

扫码关注云+社区