ごとけんです

In message "[ruby-list:23197] self の振る舞いを書き換えたいです"
    on 00/06/13, Kenya Ogata <k_ogata / mbd.nifty.com> writes:

>目的としては、クラス変数としてもっている別クラスをあたかも
>継承の親クラスのように見せかけることなのですが、

require "delegate" ではだめなんですか??

>class Parent
>  def initialize
>    @self = self
>  end
>  attr_accessor:self
>  
>  def return_self
>    return self
>  end
>end
>
>class Child
>  def initialize(_parent=Parent)
>    @parent = _parent.new
>    @parent.self = self
>  end
>
>  def method_missing(meg_id,*arg)
>    @parent.send(meg_id,*arg)
>  end
>end
>
>p Child.new.return_self.type #-> Parent(ほしいのは Child)
>
>となってしまいます。
>
>基本的には Parent から継承するときに自然にかけるように
>というのがねらいなので self にこだわりたいのですが...

return_self の定義を return self ではなく return self.self
とすれば望みの動作になります。

これは、self に限ったことではなくて、レシーバが明示されてい
ない場合ローカル変数が優先されるということよります。

 class Foo
   attr_accessor :bar
   def x
     p bar       # self.bar
   end

   def y
     bar = 0
     p bar       # bar
   end
 end

-- gotoken