首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`Post.published.collect中的`&:views_count` (&:views_count)`

`Post.published.collect中的`&:views_count` (&:views_count)`
EN

Stack Overflow用户
提问于 2010-10-08 13:58:10
回答 2查看 150关注 0票数 1

我看到了来自here的代码

代码语言:javascript
复制
Post.published.collect(&:views_count)

我猜它等于

代码语言:javascript
复制
.collect { |p| p.views_count }

但是我从来没有见过这种用法,这有名字吗?我在哪里可以找到关于它的更多信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-08 14:06:24

这实际上是一个相当聪明的技巧,将其添加到ruby1.9中。

基本上,在ruby中,变量前面的&强制它成为一个进程。它通过调用to_proc来做到这一点。一些聪明的家伙(我第一次看到这是在_whys代码中,但我不会相信他,因为我不知道是不是他想出来的)向Symbol添加了一个to_proc方法,本质上就是{|obj| obj.send self}

ruby中没有太多的强制代码,但似乎所有的代码都被用来做这样的黑客工作(比如!)将任何类型强制转换为布尔值)

票数 2
EN

Stack Overflow用户

发布于 2010-10-08 14:07:54

这是Symbol#to_proc的一个用法。Ruby运算符将Proc对象转换为块,并且因为& 1.8.7和更高版本实现了Symbol#to_proc,所以它可以与:views_count这样的符号一起使用。是的,它等同于{|p| p.views_count}

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

https://stackoverflow.com/questions/3888044

复制
相关文章

相似问题

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