2011-12-24 29 views
0

有沒有更好的方法來做到這一點?我覺得像「map」應該是在某處有:這個應該使用「地圖」方法嗎?

[ 
    :method_a, 
    :method_b, 
    :method_c 
].each do |method| 
    items.each do |item| 
     self.send(method, item) 
    end 
end 
+1

是調用順序很重要?爲什麼不簡單地使用'items.each {| i | method_a(ⅰ); method_b(ⅰ); method_c(i)}'? – 2011-12-24 03:29:21

+0

如果你使用'map',你只是用'map'來代替'each',所以從外觀的角度來看,沒有什麼變化。正如toddsundsted的寫法所表明的那樣,不同之處在於是否會產生副作用。 – sawa 2011-12-24 04:23:26

+0

略微簡化將刪除第7行的「self.」。 – sawa 2011-12-24 04:30:42

回答

7

是否使用mapeach完全取決於你是否希望操作返回方法的應用結果的列表(或者不是。

+0

明白了 - 有道理。謝謝! – Ross 2012-01-16 03:36:25

3

順便說一句,你可以使用product的方法來消除嵌套結構:

[ 
    :method_a, 
    :method_b, 
    :method_c 
].product(items).map{|method, item| 
    send(method, item) 
} 
+0

啊,這很酷。 – Ross 2012-01-16 03:31:25

相關問題