<分区>
我看到了来自 here 的代码
Post.published.collect(&:views_count)
我猜它等于
.collect { |p| p.views_count }
但我以前从未见过这种用法,请问这个有名字吗?我在哪里可以找到有关它的更多信息?
<分区>
我看到了来自 here 的代码
Post.published.collect(&:views_count)
我猜它等于
.collect { |p| p.views_count }
但我以前从未见过这种用法,请问这个有名字吗?我在哪里可以找到有关它的更多信息?
最佳答案
这实际上是 ruby 1.9 中的一个相当聪明的 hack。
基本上,&
在 ruby 中的变量前面将其强制转换为 proc。它通过调用 to_proc
来实现。一些聪明的家伙(我第一次看到这是在 _whys 代码中,但我不会相信他,因为我不知道他是否想出了它)向 Symbol 添加了一个
,本质上就是 to_proc
方法{|obj| obj.send self
.
ruby 中的 coercians 并不多,但似乎所有的 coercians 都主要用于做这样的 hack(比如 !! 将任何类型强制转换为 bool 值)
关于ruby - `&:views_count` 在 `Post.published.collect(&:views_count)`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888044/