Ruby map方法语法问题
可能重复:
map(&:name)在Ruby中意味着什么?
我正在观看railscasts更多的虚拟属性剧集 。 在那一集中,有一次,ryan使用了我无法理解的地图方法语法,有人可以解释一下吗?
tags.map(&:name).join(' ')
tags是Tag Model的一个对象,它具有name属性。 我能够理解这个的含义(我想是:))。 所有标记对象的name属性都作为数组检索并基于”连接。 但与&:name
的交易是什么
谢谢
&
是Symbol#to_proc
的快捷方式,它将您传递给它的符号转换为对象上的方法名称。 所以&:name
转换为{ |reciever| receiever.name }
{ |reciever| receiever.name }
然后传递给map方法。
这是一种很好的方法,可以使您的代码更简洁,并避免在整个地方拥有大量的块。
它是tags.map(:name.to_proc)
的简写,就像调用tags.map{|tag| tag.name }
tags.map{|tag| tag.name }
只是将所有标记名称收集到一个数组中。