54911


Rubyで平均値を算出するメソッドを簡潔に書きたいです．  
以下のサイトを参考にしたのですが，何故かうまくいきません  
<https://techacademy.jp/magazine/19683>  
ご教授よろしくお願いします．

[code]

    array = [1, 2, 3, 4, 5]
    
    class AAA
      def average
        self.inject(:+) / self.length    
      end
    end
    
    p "average = #{array.average}"
    
[/code]

エラーメッセージは以下

[code]

    undefined method `average' for [1, 2, 3, 4, 5]:Array (NoMethodError)
    
[/code]


CC BY-SA 4.0
2019-05-10T10:34:03.180
54872
2019-05-12T11:32:35.570
2019-05-10T10:48:17.190
3060
30173
question
ruby
Rubyで平均値を算出するメソッドを簡潔に書きたい


たまに、今回のように、既存の組み込みクラスに対して、メソッドを生やしたくなる場合があります。しかし、組み込みクラスにメソッドを拡張した瞬間に、どこのライブラリが壊れるかわからない、という問題があります。

自分でしたら以下のようにして、 refinement を用いて読みやすくする、ことはあると思います。

[code]

    module ArrayMixin
      refine Array do
        def average
          map(&:to_f).inject(:+) / length
        end
      end
    end
    
    class SomeCalculator
      using ArrayMixin
    
      def calculate(array)     
        avg = array.average
        puts avg
    
        # average を用いた処理を後続
      end
    end
    
    SomeCalculator.new.calculate([1,2,3,4,5,6])
    
[/code]


CC BY-SA 4.0
2019-05-12T11:32:35.570
54911
2019-05-12T11:32:35.570
754
54872
answer