2012-09-08 51 views
1

鑑於lambda表達式的陣列和值的陣列(包括在運行時創建的),Ruby:通過lambdas數組「管道」數值數組的功能方式?

values.map{ |value| lambdas[0].(value) } 

將(顯然)返回爲陣列施加第一所述lambda表達式的每個值的的結果。但我需要做的是應用所有的lambda表達式,即

values. 
    map{ |value| lambdas[0].(value) }. 
    map{ |value| lambdas[1].(value) }. 
    ... 
    map{ |value| lambdas[-1].(value) } 

相當於我當然可以寫一個方法來做到這一點,例如

def map_all(lambdas, values) 
    if lambdas.length == 0 
    values 
    else 
    map_all(lambdas.drop(1), values.map{ |value| lambdas.first.(value) }) 
    end 
end 

但有沒有更優雅或慣用的方式來做到這一點?

回答

4

當然,在這裏你去:

values.map { |value| lambdas.inject(value) { |v,l| l.(v) } } 
+0

這確實好聽。謝謝! –