Project

General

Profile

Bug #2402

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

`instance_eval`のブロック内で`super`を呼ぶと、`instance_eval`で変更された 
 `self`に対して`super`の呼び出しを行ってしまうようです。 

 ~~~ruby 
 =begin 
  instance_evalのブロック内でsuperを呼ぶと、instance_evalで変更された 
  selfに対してsuperの呼び出しを行ってしまうようです。 
 
  defiant:build$ cat t.rb 
 
  class Foo 
   
    def foo 
     
      p self 
   
    end 
 
  end 

 
 
  class Bar < Foo 
   
    def foo 
     
      x = Object.new 
     
      x.instance_eval do 
       
        super 
     
      end 
   
    end 
 
  end 

 
 
  Bar.new.foo 
 ~~~ 
 ~~~ 
 
  defiant:build$ ./ruby-trunk.1124 -v t.rb 
 
  ruby 1.9.2dev (2009-11-24 trunk 25909) [i686-linux] 
 
  #<Object:0x8590f6c> 
 
  Foo#fooが呼ばれるのにselfがObjectという、ちょっとおかしなことになっています。 
  ちょっと自信がありませんが、一応パッチを添付します。 
 ~~~ 

 `Foo#foo`が呼ばれるのに`self`が`Object`という、ちょっとおかしなことになっています。 
 ちょっと自信がありませんが、一応パッチを添付します。 =end 

Back