hey*_*ike 42 ruby activerecord ruby-on-rails
可能重复:
map(&:name)在Ruby中意味着什么?
Post.all.map(&:id)
Run Code Online (Sandbox Code Playgroud)
将返回
=> [1, 2, 3, 4, 5, 6, 7, ................]
Run Code Online (Sandbox Code Playgroud)
什么map(&:id)意思?特别是&.
Nik*_* B. 81
该&符号用于表示以下参数应被视为给予该方法的块.这意味着如果它还不是Proc对象,to_proc则会调用其方法将其转换为一个.
因此,您的示例会产生类似的结果
Post.all.map(&:id.to_proc)
Run Code Online (Sandbox Code Playgroud)
而这相当于
Post.all.map { |x| x.id }
Run Code Online (Sandbox Code Playgroud)
因此,它迭代返回的集合Post.all并构建一个数组,并id在每个项目上调用该方法的结果.
这是有效的,因为Symbol#to_proc创建了一个Proc,它接受一个对象并使用其上的符号名称调用该方法.它主要用于方便,节省一些打字.
&表示你正在传递一个块
Post.all是方法.map的接收者,它的块正在被传递
Post.all.map { |item| # do something }
Run Code Online (Sandbox Code Playgroud)
http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map
它遍历数组并使用符号#to_proc创建一个lambda
http://ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc