ふと配列の足し算が必要になったので、sumメソッドあるだろーと思ったら
[1] pry(main)> a=[1,2,3,4]
=> [1, 2, 3, 4]
[2] pry(main)> a.sum
NoMethodError: undefined method `sum' for [1, 2, 3, 4]:Array
from (pry):2:in `__pry__'
これは驚いた、Rubyのメソッドはわりと直感的に操作できるところが
あって、最小値、最大値なんかは
[3] pry(main)> a.min
=> 1
[4] pry(main)> a.max
=> 4
こんな感じで出してくれる。
話は戻って。Arrayクラスにsumメソッドが無いなんて。。
* 無いなら自分で作ればいいじゃない *
[5] pry(main)> class Array
[5] pry(main)* def sum
[5] pry(main)* self.inject(0){|sum,value| sum+=value }
[5] pry(main)* end
[5] pry(main)* end
=> nil
[6] pry(main)> a.sum
=> 10
Arrayクラスをオーバーライドしてsumメソッド追加。これで完成〜
今回はsumメソッドが無いから作りましたが、実際にはsumメソッドが定義されて
いる場合もあるので
[1] pry(main)> Array.method_defined?(:sum)
=> false
method_defined?メソッドで先に調べると後々幸せになれるかも。
おまけ
ちなみに配列の要素の掛け算はこんな感じになる
[2] pry(main)> class Array
[2] pry(main)* def times
[2] pry(main)* self.inject(1){|sum,value| sum*=value }
[2] pry(main)* end
[2] pry(main)* end
=> nil
[3] pry(main)> a=[1,2,3,4]
=> [1, 2, 3, 4]
[4] pry(main)> a.times
=> 24