Ruby map方法语法问题

时间:2011-03-08 11:37:49

标签: ruby-on-rails ruby ruby-on-rails-3 railscasts

  

可能重复:
  What does map(&:name) mean in Ruby?

我在看railscasts more virtual attributes episode。在那一集中,有一次,ryan使用了我无法理解的地图方法语法,有人可以解释一下吗?

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

标签是Tag Model的一个对象,它具有name属性。我能够理解这个的含义(我想是:))。所有标记对象的name属性都作为数组检索并基于''连接。但与&:name

的交易是什么

由于

2 个答案:

答案 0 :(得分:9)

&Symbol#to_proc的快捷方式,它会将您传递给它的符号转换为对象上的方法名称。因此&:name转换为{ |reciever| receiever.name },然后传递给地图方法。

这是一种很好的方法,可以使您的代码更加简洁,避免在整个地方放置大量的块。

答案 1 :(得分:6)

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