我在RailsCast中找到了这段代码:

def tag_names
  @tag_names || tags.map(&:name).join(' ')
end

map(&:name)中的(&:name)是什么意思?


当前回答

tags.map(&:name)

是一样的

tags.map{|tag| tag.name}

&:name只是使用符号作为要调用的方法名。

其他回答

它基本上在数组中的每个标签上执行方法调用tag.name。

它是一个简化的ruby简写。

它是标签的简写。映射{|标记|tag .name}。加入(' ')

(&:name)是(&:name.to_proc)的缩写,与标签相同。映射{|t| t.name}。加入(' ')

to_proc实际上是用C语言实现的

Map (&:name)接受一个可枚举对象(在您的例子中是标签),并为每个元素/标签运行name方法,输出该方法的每个返回值。

这是一个简写

array.map { |element| element.name }

返回元素(标签)名称的数组

它等价于

def tag_names
  @tag_names || tags.map { |tag| tag.name }.join(' ')
end