require 'delegate'


# 正しい動作
a = Object.new
def a.test
  p 1
end
c = SimpleDelegator.new( a )
c.test



# 間違った動作を起こす

class Uy_Object
  def initialize
  end
  def respond_to_missing?(m, include_private)
    # 呼ばれるべきではないメソッド
    p :responde_to_missing
    self.__getobj__.respond_to?(m, include_private)
  end
  def __getobj__
    # 呼ばれるべきではないメソッド
    p :exit
    exit
  end
  def f
    p :def_f
  end
end

c.__setobj__  Uy_Object.new
 
c.f # => :def_f

c.test # exit


