モジュールと bang(破壊的)メソッド
今日はじめて気づいたこと。
reject は Enumerable にあるが、reject! は Array にある。
$ ruby -e ' class MyClass include Enumerable def initialize @a = 1 @b = 2 @c = 3 end def each yield @a yield @b yield @c end end o = MyClass.new p o.reject{|e| e == 2} p o.reject!{|e| e == 2} ' [1, 3] -e:19: undefined method `reject!' for #<MyClass:0x100e6218 @c=3, @b=2, @a=1> (NoMethodError)
あー、そりゃそうだわな。Enumerable が削り方知ってるわきゃないもん。
モジュールは bang(破壊的)メソッドを定義できない、っと。
ん? 追加・削除のメソッドがインクルード元で定義してあればいけるか? いやいやいやいや、まあまあまあまあ、まーまままままままま、おっとっとっとっと。