我在RailsCast 中找到了这段代码:
def tag_names @tag_names || tags.map(&:name).join(' ') end
(&:name)in是什么map(&:name)意思?
(&:name)
map(&:name)
这是简写tags.map(&:name.to_proc).join(' ')
tags.map(&:name.to_proc).join(' ')
如果foo是具有to_proc方法的对象,则可以将其传递给方法 as &foo,该方法将调用foo.to_proc并将其用作方法的块。
foo
to_proc
&foo
foo.to_proc
该Symbol#to_proc方法最初由 ActiveSupport 添加,但已集成到 Ruby 1.8.7 中。这是它的实现:
Symbol#to_proc
class Symbol def to_proc Proc.new do |obj, *args| obj.send self, *args end end end