结合映射和注入的Ruby数组链表

结合映射和注入的Ruby数组链表,ruby,inject,map-function,chainable,Ruby,Inject,Map Function,Chainable,有没有一种很好的方法来创建一个结合map和inject的动态链接Ruby数组 这就是我的意思。假设a是一个整数数组,那么要得到两个相邻元素的所有和,我们可以: a.each_cons(2).map(&:sum) 我们还可以通过以下方式获得数组a中所有元素的乘积: 但我们不能这样做: a.each_cons(2).map(&:inject(1,&:*)) 但是,我们可以定义一个可链接的数组: class Array def prod return self

有没有一种很好的方法来创建一个结合map和inject的动态链接Ruby数组

这就是我的意思。假设a是一个整数数组,那么要得到两个相邻元素的所有和,我们可以:

a.each_cons(2).map(&:sum)
我们还可以通过以下方式获得数组a中所有元素的乘积:

但我们不能这样做:

a.each_cons(2).map(&:inject(1,&:*))
但是,我们可以定义一个可链接的数组:

class Array

  def prod
    return self.inject(1,&:*)
  end

end

然后a.each_cons2.map&:prod可以正常工作。

如果使用此处显示的wierd符号补丁:

这允许您通过以下方式将参数传递给proc速记:


我确信Ruby core中已经多次请求过这个,不幸的是,我现在没有Ruby论坛的链接,但我向您保证它就在那里。

如果您使用此wierd Symbol补丁,如下所示:

这允许您通过以下方式将参数传递给proc速记:


我确信Ruby core中已经多次请求过这一点,不幸的是,我现在没有Ruby论坛的链接,但我向您保证它就在那里。

我怀疑这是您想要的,但不要忘记,您仍然可以使用普通块调用map

a.each_cons(2).map { |n1, n2| n1 * n2 }

由于您在问题中没有提到它,我认为您可能忽略了最简单的选项。

我怀疑这是否是您要寻找的,但不要忘记,您仍然可以使用普通块调用map

a.each_cons(2).map { |n1, n2| n1 * n2 }
既然你在问题中没有提到这一点,我想你可能忽略了最简单的选择

[[1,2],[3,4]].map(&:inject.(1, &:*))
# => [2, 12]
a.each_cons(2).map { |n1, n2| n1 * n2 }