From: "shugo (Shugo Maeda)" <redmine@...>
Date: 2012-11-05T11:57:45+09:00
Subject: [ruby-core:48871] [ruby-trunk - Bug #7271] Refinement doesn't seem lexical


Issue #7271 has been updated by shugo (Shugo Maeda).


ko1 (Koichi Sasada) wrote:
> C_User#y is refined.  Is that intentional?

Yes, it's intentional.  Refinements are activated when C_User is reopend.

I'm not sure whether is'a good idea or not, but if C_User.module_eval is affected by refinements, it seems natural reopened definitions of C_User are also affected.

----------------------------------------
Bug #7271: Refinement doesn't seem lexical
https://bugs.ruby-lang.org/issues/7271#change-32359

Author: ko1 (Koichi Sasada)
Status: Assigned
Priority: Normal
Assignee: shugo (Shugo Maeda)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-11-01 trunk 37404) [i386-mswin32_100]


C_User#y is refined.  Is that intentional?

class C
  def foo
    p :C_foo
  end
end
 
module RefineC
  refine C do
    def foo
      p :RefineC_foo
      super
    end
  end
end
 
class C_User
  using RefineC
  def x
    C.new.foo
  end
end
 
class C_User
  def y
    C.new.foo
  end
end
 
C_User.new.x
C_User.new.y

#=>
:RefineC_foo
:C_foo
:RefineC_foo
:C_foo



-- 
http://bugs.ruby-lang.org/