新しいるりまを眺めながら書いたネタクラス
(修正:addedメソッドは消されない様にした)
class Foo def original; end def singleton_method_added(name) unless name == :method_added puts "singleton method #{name} was rejected" (class << self; self end).__send__ :remove_method, name end end def self.method_added(name) unless name == :singleton_method_added puts "method #{name} was rejected" self.__send__ :remove_method, name end end end
メソッド、特異メソッドを追加しようとするとリジェクトされます。
つまりsingleton_method_addedとmethod_addedの前に書いたメソッドしか生き残れません。
オリジナルのメソッドも同名のメソッドで上書きするとその瞬間に消されるので生き残れません。
addedメソッドもしかり。(修正済み)
Foo.__send__(:define_method, :foo) {} #=> method foo was rejected Foo.new.respond_to?(:foo) #=> false
生存競争が激しい世界のようです。