以下の内容はhttps://blog.nishimu.land/entry/20081130/1228018155より取得しました。


後からメソッドを追加できないクラス定義

新しいるりまを眺めながら書いたネタクラス

(修正: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

生存競争が激しい世界のようです。




以上の内容はhttps://blog.nishimu.land/entry/20081130/1228018155より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14