了解[ClassOne,ClassTwo] .each(&:my_method)
时间:2020-03-06 14:24:34 来源:igfitidea点击:
Possible Duplicate: What does map(&:name) mean in Ruby?
我正在看一个栏杆广播,看到了这段代码。
[Category, Product].(&:delete_all)
关于清除数据库。
我问了IRC中的线路,并被告知
(&:delete_all)
是捷径
{|model| model.delete_all}
我用以下方法对此进行了测试
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"中对此进行了定义。
这是Ruby的一些Rails特定修补程序,是proc的符号。