accumulateという操作を実装してください。この操作は、コレクションと、その各要素に対して行う操作を受け取り、入力コレクションの各要素にその操作を適用した結果を収めた新しいコレクションを返します。
次の数値のコレクションがあるとします。
そして、操作は次のとおりです。
x => x * x)書いたコードで、2乗した値のコレクションを生成できるようにしてください。
期待される関数シグネチャは、テストスイートで確認してください。
標準ライブラリが提供するcollect、map、fmap、その他もろもろの機能には手を出さないでください! 代わりに、ほかの基本的な道具を使って、自分で解いてみてください。
汎用的なEnumerableのメソッドを定義するときは、ブロックが渡されなかった場合に備えて、#to_enumを呼ぶのが一般的です。
追加できるテストを次に示します。
def test_accumulate_when_block_is_deferred
skip
accumulate_enumerator = [1, 2, 3].accumulate
accumulated_result = accumulate_enumerator.map do |number|
number * number
end
assert_equal [1, 4, 9], accumulated_result
end