我试图用ruby中的函数式编程来解决这个问题,似乎没有太多好的文档.
本质上,我正在尝试编写一个具有Haskell类型签名的组合函数:
[a] -> [a] -> (a -> a -> a) -> [a]
所以
combine([1,2,3], [2,3,4], plus_func) => [3,5,7] combine([1,2,3], [2,3,4], multiply_func) => [2,6,12]
等等
我发现了一些关于使用zip和map的东西,但是使用它感觉真的很难看.
实现这样的东西最"红宝石"的方式是什么?
好吧,你说你知道拉链和地图所以这可能没有帮助.但我会发布以防万一.
def combine a, b a.zip(b).map { |i| yield i[0], i[1] } end puts combine([1,2,3], [2,3,4]) { |i, j| i+j }
不,我也不觉得它很漂亮.
编辑 -#ruby-lang @ irc.freenode.net建议:
def combine(a, b, &block) a.zip(b).map(&block) end
或者,如果你想转发args:
def combine(a, b, *args, &block) a.zip(b, *args).map(&block) end