可能重复:
What does map(&:name) mean in Ruby?Post.all.map(&:id)是什么意思?
Post.all.map(&:id)
将返回
=> [1, 2, 3, 4, 5, 6, 7, ................]
是什么map(&:id)
意思?特别是&
。
可能重复:
What does map(&:name) mean in Ruby?Post.all.map(&:id)是什么意思?
Post.all.map(&:id)
将返回
=> [1, 2, 3, 4, 5, 6, 7, ................]
是什么map(&:id)
意思?特别是&
。
&
符号用于表示以下参数应视为给予该方法的块。这意味着如果它不是一个Proc对象,它的to_proc
方法将被调用以将其转换为一个。
因此,在一些你的榜样结果像
Post.all.map(&:id.to_proc)
这又相当于
Post.all.map { |x| x.id }
所以它遍历由Post.all
返回的集合,并构建了结果数组每个项目都调用id
方法。
这是可行的,因为Symbol#to_proc
创建了一个Proc,它接受一个对象并用该对象的名称调用该方法。它主要用于方便,以节省一些打字。
这需要所有Post
对象并创建一个数组,其中每个对象都调用id
方法。
换句话说,对于ActiveRecord,这意味着您将获得数组中的所有Post
实体的id
属性。
这是一个Ruby技巧,它依靠Ruby进行一些动态类型转换。你可以找到关于Symbol#to_proc trick here的解释。
&意味着要传递一个块
Post.all是方法.MAP的接收机,其块被上
Post.all.map { |item| # do something }
http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map
它遍历传递数组并创建带符号的拉姆达#to_proc
谢谢关闭作为确切的副本。这个问题有点难以搜索。抱歉。 – 2012-02-27 16:59:11