1

给定一个 lambda 数组和一个值数组(均在运行时创建),

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

1 回答 1

4

喏,给你:

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