2011-12-24 42 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