我在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)是什么意思?
当前回答
如下所示:
def tag_names
if @tag_names
@tag_names
else
tags.map{ |t| t.name }.join(' ')
end
其他回答
它的意思是
array.each(&:to_sym.to_proc)
tags.map(&:name)
是一样的
tags.map{|tag| tag.name}
&:name只是使用符号作为要调用的方法名。
Ruby中没有&:操作符。你所看到的是&运算符应用于:符号。
在方法参数列表中,&操作符接受其操作数,如果还没有将其转换为Proc对象(通过对其调用to_proc),并将其传递给方法,就像使用了块一样。
my_proc = Proc.new{插入“foo”}
My_method_call (&my_proc) #是相同的: My_method_call {put "foo"}
首先,&:name是&:name的快捷键。To_proc,其中:name。to_proc返回一个Proc(类似于lambda,但不完全相同),当以对象作为(第一个)参数调用时,调用该对象的name方法。
其次,当& in def foo(&block)…end将传递给foo的块转换为Proc,当应用到Proc时则相反。
因此,&:名字。To_proc是一个以一个对象作为参数并调用该对象上的name方法的块,即{|o| o.name}。
它基本上在数组中的每个标签上执行方法调用tag.name。
它是一个简化的ruby简写。