`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}