首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby do/end vs花括号

Ruby do/end vs花括号
EN

Stack Overflow用户
提问于 2011-04-01 20:43:57
回答 3查看 13.8K关注 0票数 23

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

代码语言:javascript
复制
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]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-01 20:50:54

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

代码语言:javascript
复制
p(a.map) do ... end

而不是:

代码语言:javascript
复制
p(a.map do ... end)

在这种情况下,语法是模棱两可的,而且do似乎不像{那样绑定得那么强。

票数 22
EN

Stack Overflow用户

发布于 2011-04-01 20:53:57

这与{字符和do关键字的关联性不同有关。

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

在第二种情况下,块被解释为p函数的块参数,而a.map被解释为p函数的第一个参数。由于a.map的计算结果为a,因此将打印原始数组。在这种情况下,该块实际上被忽略了。

票数 4
EN

Stack Overflow用户

发布于 2011-04-01 20:52:23

使用do/end语法,您可以将块作为第二个参数传递给p,而不是传递给映射。您可以使用以下命令获得相同的结果:

代码语言:javascript
复制
p a.map

p会忽略该块,因为它不会在inspect上产生任何内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5513531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档