我在看railscasts more virtual attributes episode。在那一集中,有一次,ryan使用了我无法理解的地图方法语法,有人可以解释一下吗?
tags.map(&:name).join(' ')
标签是Tag Model的一个对象,它具有name属性。我能够理解这个的含义(我想是:))。所有标记对象的name属性都作为数组检索并基于''连接。但与&:name
由于
答案 0 :(得分:9)
&
是Symbol#to_proc
的快捷方式,它会将您传递给它的符号转换为对象上的方法名称。因此&:name
转换为{ |reciever| receiever.name }
,然后传递给地图方法。
这是一种很好的方法,可以使您的代码更加简洁,避免在整个地方放置大量的块。
答案 1 :(得分:6)
这是tags.map(:name.to_proc)
的简写,就像调用tags.map{|tag| tag.name }
一样,只是将所有标记名称收集到一个数组中。