可能重复:
map(&:name)在Ruby中意味着什么?
我正在看一个railscast并看到了这段代码.
[Category, Product].(&:delete_all)
Run Code Online (Sandbox Code Playgroud)
关于清理数据库.
我询问了IRC中的线路,并被告知
(&:delete_all)
Run Code Online (Sandbox Code Playgroud)
是一个捷径
{|model| model.delete_all}
Run Code Online (Sandbox Code Playgroud)
我用以下测试了这个
class ClassOne
def class_method
puts 1
end
end
class ClassTwo
def class_method
puts 2
end
end
[ClassOne, ClassTwo].each(&:class_method)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说
Wrong Argument type Symbol (expected Proc)
Run Code Online (Sandbox Code Playgroud)
我也试过了
one = ClassOne.new
two = ClassTwo.new
[one, two].each(&:class_method)
Run Code Online (Sandbox Code Playgroud)
但那仍然失败了.
如果我修改它来阅读
[one, two].each{|model| model.class_method}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
那么,&:delete_all实际上做了什么?文档说这delete_all是一种方法,所以我对这里发生的事情感到困惑.
Ale*_*x M 20
这依赖于Ruby 1.9扩展,可以通过包含以下内容在1.8中完成:
class Symbol
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
end
Run Code Online (Sandbox Code Playgroud)
我相信Rails定义了这个ActiveSupport.
| 归档时间: |
|
| 查看次数: |
3218 次 |
| 最近记录: |