重写注入这是创客学院的第二个周末挑战。任务目标是重写Array类的注入方法。引用的重写适用于所有可枚举类,但本次挑战的重点在于数组处理。

核心任务

由制造商提供的要求是:重新打开Array类或其子类并重写注入方法。首先需要为该方法编写一个测试用例。请勿担心返回枚举器,假设每次调用时都有一个代码块提供。

为避免与RSpecinject()方法的冲突,请将您定义的注入方法命名为其他名字。即便如此,如果未实现完美重写,测试可能会失败并显示不易理解的消息。

若要更具挑战性,建议用迭代器递归重写两次注入方法(这两种方法并非测试必需)。

基本功能说明

注入使用一个起始“累加器”值进行初始化,该值默认设置为数组的第一个元素,但可以接受预设值(如零)。inject方法遍历数组的每个(后续)元素,对累加器值进行块中定义的计算。累加器在每次计算后更新为返回的新值。

以下为示例,演示如何对所有元素求和并使用零作为累加器初始值:


class Array  

  def custom_inject(initial = nil)  

    acc = initial || self.first  

    each { |element| acc = yield(acc, element) }  

    acc  

  end  

end  

# 测试用例  

puts [1, 2, 3].custom_inject(0) { |sum, n| sum + n } # 输出: 6