我正在努力研究 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 的东西,但使用起来感觉真的很难看。
什么是最“ ruby ”的实现方式?
最佳答案
嗯,您说过您了解 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 }
不,我也不觉得它漂亮。
edit - #ruby-lang @irc.freenode.net 建议:
def combine(a, b, &block)
a.zip(b).map(&block)
end
或者这个,如果你想转发参数:
def combine(a, b, *args, &block)
a.zip(b, *args).map(&block)
end
关于ruby - 在 ruby 中将函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444285/