`Post.published.collect(&:views_count)`中的`&:views_count“`
我从这里看到了代码
Post.published.collect(&:views_count)
我想这等于
.collect { |p| p.views_count }
但是我从来没有看到过这个用法,这是否有一个名字? 我在哪里可以find更多关于它的信息?
这实际上是一个相当聪明的黑客入侵ruby1.9。
基本上,在Ruby中的一个variables前面强制它成为一个proc。 它通过调用to_proc
。 有些聪明的人(第一次看到这是在_whys代码,但我不会相信他,因为我不知道他是否想出了它)添加了to_proc
方法Symbol
,这本质上是{|obj| obj.send self}
{|obj| obj.send self}
。
ruby中没有太多的coercians,但是看起来好像所有这些都被用来做这样的黑客(比如把任何types强制转换为boolean)
这是使用Symbol#to_proc
。 &
运算符将一个Proc对象转换为一个块,因为Ruby 1.8.7和更高版本实现了Symbol#to_proc
,所以它可以使用像:views_count
这样的符号。 是的,这相当于{|p| p.views_count}
{|p| p.views_count}
。