本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What does map(&:name) mean in Ruby?
我正在看一个栏杆广播,看到了这段代码。
1
| [Category, Product].(&:delete_all) |
关于清除数据库。
我问了IRC中的电话,并被告知
是捷径
1
| {|model| model.delete_all} |
我用以下方法测试了
1 2 3 4 5 6 7 8 9 10 11 12 13
| class ClassOne
def class_method
puts 1
end
end
class ClassTwo
def class_method
puts 2
end
end
[ClassOne, ClassTwo].each(&:class_method) |
我收到一条错误消息,说
1
| Wrong Argument type Symbol (expected Proc) |
我也试过
1 2 3 4
| one = ClassOne.new
two = ClassTwo.new
[one, two].each(&:class_method) |
但这仍然失败。
如果我将其修改为阅读
1
| [one, two].each{|model| model.class_method} |
一切都按预期进行。
那么,&:delete_all实际上是做什么的呢? 文档说delete_all是一种方法,所以我对这里发生的事情感到困惑。
这依赖于可以在1.8中完成的Ruby 1.9扩展,包括以下内容:
1 2 3 4 5
| class Symbol
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
end |
我相信Rails在ActiveSupport中对此进行了定义。
这是Ruby的一些Rails特定补丁,即proc的符号。