我在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)是什么意思?
当前回答
(&:name)是(&:name.to_proc)的缩写,与标签相同。映射{|t| t.name}。加入(' ')
to_proc实际上是用C语言实现的
其他回答
Map (&:name)接受一个可枚举对象(在您的例子中是标签),并为每个元素/标签运行name方法,输出该方法的每个返回值。
这是一个简写
array.map { |element| element.name }
返回元素(标签)名称的数组
它是标签的简写。映射{|标记|tag .name}。加入(' ')
首先,&:name是&:name的快捷键。To_proc,其中:name。to_proc返回一个Proc(类似于lambda,但不完全相同),当以对象作为(第一个)参数调用时,调用该对象的name方法。
其次,当& in def foo(&block)…end将传递给foo的块转换为Proc,当应用到Proc时则相反。
因此,&:名字。To_proc是一个以一个对象作为参数并调用该对象上的name方法的块,即{|o| o.name}。
这里: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