重写注入这是创客学院的第二个周末挑战。任务目标是重写Array
类的注入方法。引用的重写适用于所有可枚举类,但本次挑战的重点在于数组处理。
核心任务
由制造商提供的要求是:重新打开Array
类或其子类并重写注入方法。首先需要为该方法编写一个测试用例。请勿担心返回枚举器,假设每次调用时都有一个代码块提供。
为避免与RSpec
中inject()
方法的冲突,请将您定义的注入方法命名为其他名字。即便如此,如果未实现完美重写,测试可能会失败并显示不易理解的消息。
若要更具挑战性,建议用迭代器和递归重写两次注入方法(这两种方法并非测试必需)。
基本功能说明
注入使用一个起始“累加器”值进行初始化,该值默认设置为数组的第一个元素,但可以接受预设值(如零)。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
暂无评论