Post.all.map(&:id)是什么意思?
可能重复:
在Ruby中map(&:name)是什么意思?
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
方法的结果构build一个数组。
这是有效的,因为Symbol#to_proc
创build了一个Proc,它接受一个对象,并用该对象的名称调用该方法。 这主要是为了方便使用,以节省一些打字。
&意味着你正在通过一个块
Post.all是方法.map的接收者,并且它的块被传递
Post.all.map { |item| # do something }
http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map
它迭代数组并创build一个符号为#to_proc的lambda
这将获取所有Post
对象,并创build一个数组,并在每个对象上调用id
方法。
换句话说,对于ActiveRecord来说,这意味着你正在为数据库中的所有Post
实体获取一个具有id
属性的数组。
这是一个Ruby技巧,它依靠Ruby进行一些dynamictypes转换。 你可以在这里findSymbol#to_proc技巧的解释。