理解 .each(&:my_method)
可能重复:
在Ruby中map(&:name)是什么意思?
我正在看railscast,看到这个代码。
[Category, Product].(&:delete_all)
关于清理数据库。
我询问了IRC的线路,并被告知
(&:delete_all)
是一个捷径
{|model| model.delete_all}
我testing了以下内容
class ClassOne def class_method puts 1 end end class ClassTwo def class_method puts 2 end end [ClassOne, ClassTwo].each(&:class_method)
我收到一个错误说
Wrong Argument type Symbol (expected Proc)
我也试过了
one = ClassOne.new two = ClassTwo.new [one, two].each(&:class_method)
但是那仍然失败了。
如果我修改它来阅读
[one, two].each{|model| model.class_method}
一切按预期工作。
那么, &:delete_all
实际上是做什么的? 文档说delete_all
是一种方法,所以我对这里发生的事情感到困惑。
这依赖于1.8版本的Ruby 1.9扩展,其中包括以下内容:
class Symbol def to_proc proc { |obj, *args| obj.send(self, *args) } end end
我相信Rails在ActiveSupport
定义了这个。
这是一些Rails特定的Ruby修补程序, 符号到proc 。