4

可能重复:
map(&:name) 在 Ruby 中是什么意思?

我在看railscasts更多的虚拟属性集。在那一集中,ryan 有一次使用了我无法理解的 map 方法语法,有人可以解释一下吗?

tags.map(&:name).join(' ')

tags 是 Tag Model 的一个对象,具有 name 属性。我能够理解这个的含义(我想是这样:))。所有标签对象的名称属性都作为数组检索并基于“”进行连接。但是有什么关系&:name

谢谢

4

2 回答 2

9

&是一个快捷方式,Symbol#to_proc可以将传递给它的符号转换为对象上的方法名称。所以&:name转换成{ |reciever| receiever.name }哪个然后传递给 map 方法。

这是使您的代码更加简洁并避免到处都有大量块的好方法。

于 2011-03-08T11:41:35.697 回答
6

它的简写tags.map(:name.to_proc)就像调用一样tags.map{|tag| tag.name },只是将所有标签名称收集到一个数组中。

于 2011-03-08T11:39:58.227 回答