🗂

Grow.rbのeach_with_object問題を解いてみる

2024/12/23に公開

Grow.rbとは:

Ruby力を高めたいRubyistたちが、コードを書いたりちょっとマニアックな内容を学んだりするコミュニティです。

オリジナルのeach_with_objectメソッドを作ってみようというテーマです。

テストコードはこちら。

https://github.com/grow-rb/enumerable-exercises/blob/d08568e5319c9d24a74c9cb635ed1115ad43adc3/each_with_object/each_with_object_test.rb#L1-L12

書いた回答がこちら。

module Enumerable
  def my_each_with_object(arg, &block)
    result_array = []
    if arg.instance_of?(Array)
      each do |num|
        result_array << block.call(num, [])
      end
      result_array.flatten
    elsif arg.instance_of?(String)
      each do |str|
        result_array << block.call(str, '')
      end
      arg.concat(result_array.join)
    end
  end
end

生成AIにリファクタリングしてもらったコードがこちら。

module Enumerable
  def my_each_with_object(obj)
    each do |element|
      yield(element, obj)
    end
    obj
  end
end

なぜ最初からこのコードが書けなかったのかというほど、無駄のないコード。納得感がありすぎる。

Discussion