1

ラムダの配列と値の配列(両方とも実行時に作成されます)が与えられた場合、

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

(明らかに)最初のラムダを各値に適用した結果を配列として返します。しかし、私がする必要があるのは、すべてのラムダを適用することです。

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

1 に答える 1

4

確かに、ここに行きます:

values.map { |value| lambdas.inject(value) { |v,l| l.(v) } }
于 2012-09-08T23:41:59.540 に答える