2013-02-04 85 views
2

我將如何調用該塊在紅寶石中使用_id.to_s如何在ruby中使用映射方法調用方法鏈?

category_ids = categories.map(&:_id.to_s) 

我盜號的,做現在以下幾點:

category_ids = [] 
categories.each do |c| 
    category_ids << c.id.to_s 
end 
+10

有趣。作爲一個長期的Rubyist,我從來沒有想到有人會知道新的Symbol#to_proc快捷方式而不知道標準塊的形式。 –

+1

['Enumerable#map'](http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map)的文檔顯示瞭如何使用塊。你看過嗎? –

回答

8

你可以傳遞塊映射以及塊內把你的表達。可枚舉的每個成員都將繼承該塊。

category_ids = categories.map {|c| c._id.to_s } 
2
category_ids = categories.map(&:_id).map(&:to_s) 

測試:

categories = ["sdkfjs","sdkfjs","drue"] 
categories.map(&:object_id).map(&:to_s) 
=> ["9576480", "9576300", "9576260"] 
0

如果你真的想鏈的方法,您可以覆蓋符號#to_proc

*這個答案是類似於被向下投了一個。我不知道爲什麼......

class Symbol 
    def to_proc 
    to_s.to_proc 
    end 
end 

class String 
    def to_proc 
    split("\.").to_proc 
    end 
end 

class Array 
    def to_proc 
    proc{ |x| inject(x){ |a,y| a.send(y) } } 
    end 
end 

strings_arr = ["AbcDef", "GhiJkl", "MnoPqr"] 
strings_arr.map(&:"underscore.upcase") 
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"] 

strings_arr.map(&"underscore.upcase") 
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"] 

strings_arr.map(&["underscore", "upcase"]) 
#=> ["ABC_DEF", "GHI_JKL", "MNO_PQR"] 

Ruby ampersand colon shortcut

相關問題