我在RailsCast中找到了这段代码:
def tag_names
@tag_names || tags.map(&:name).join(' ')
end
map(&:name)中的(&:name)是什么意思?
我在RailsCast中找到了这段代码:
def tag_names
@tag_names || tags.map(&:name).join(' ')
end
map(&:name)中的(&:name)是什么意思?
当前回答
虽然我们已经有了很好的答案,但从初学者的角度来看,我想添加额外的信息:
map(&:name)在Ruby中是什么意思?
这意味着,您正在将另一个方法作为参数传递给map函数。 (实际上,您传递的是一个符号,该符号将被转换为proc。但在这种特殊情况下,这并不那么重要)。
重要的是,您有一个名为name的方法,它将被map方法用作参数,而不是传统的块样式。
其他回答
Map (&:name)接受一个可枚举对象(在您的例子中是标签),并为每个元素/标签运行name方法,输出该方法的每个返回值。
这是一个简写
array.map { |element| element.name }
返回元素(标签)名称的数组
它的意思是
array.each(&:to_sym.to_proc)
如下所示:
def tag_names
if @tag_names
@tag_names
else
tags.map{ |t| t.name }.join(' ')
end
这里:name是指向标记对象的方法名的符号。 当我们将&:name传递给map时,它将把name作为一个proc对象。 简而言之,tags.map(&:name)充当:
tags.map do |tag|
tag.name
end
它等价于
def tag_names
@tag_names || tags.map { |tag| tag.name }.join(' ')
end