刚开始编码,并且已经经历了ruby中一些更常用的方法,monkey对它们进行了修补,以便更好地理解每种方法的工作原理(btw帮助了大量的工作)。
现在我又做了同样的事情,但是对于我之前迭代过的那些,我使用的是递归。我的问题是:
我正在为#inject类创建自己的Array方法,并希望递归地编写此方法。该方法将允许传递可选的累加器和proc。如何使用以下格式完成此操作?

class Array
  def my_inject(accum = nil, &prc)
    #code
  end
end

另外,我是否需要担心原始数组的变异,是否应该使用#dup?提前谢谢你的帮助!

最佳答案

另一种实现方式

class Array
  def aggregate(accumulator = nil, &sumator)
    return accumulator if empty?

    drop(1).aggregate(accumulator ? sumator.(accumulator, first) : first, &sumator)
  end
end

至于你是否应该担心改变原来的-简而言之-是的。通常ruby中的方法不会在可能的情况下对对象进行变异并复制。通常情况下,会有“时代爆炸”(!)的替代方案。所说的“危险”方法在原处进行变异,而不是返回副本。然而,在这种情况下,这是没有意义的。原来是一个数组,结果是和。
至于修改原稿并分别返回结果,除非你有一个真正的性能(或其他)考虑,否则你不应该这样做。这是不直观的,可能导致混乱的情况。

10-08 01:17