可能重複:
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