我正在观看有轨电视播放并看到此代码。
[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
是一种方法,所以我对这里发生的事情感到困惑。
答案 0 :(得分:20)
这取决于可以在1.8中完成的Ruby 1.9扩展,包括以下内容:
class Symbol
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
end
我相信Rails在ActiveSupport
中定义了这个。
答案 1 :(得分:3)
这是Ruby的一些Rails特定补丁,symbol to proc。