Project

General

Profile

Bug #16242

Updated by osyo (manga osyo) about 5 years ago

Refinements method call to failed with `prepend`. 


 ## No problem 

 ```ruby 
 module M 
   # Methods that you want to call only within this context 
   refine M do 
     def refine_method 
       "refine_method" 
     end 
   end 
   using M 

   def hoge 
     # OK: `refine_method` calls the method 
     refine_method 
   end 
 end 

 class X 
   include M 
 end 

 pp X.new.hoge 
 # => "refine_method" 
 ``` 


 ## No problem 

 * If `prepend` another module, the search for `refine_method` fails 

 ```ruby 
 module OtherM 
 end 

 module M 
   # Added prepend 
   prepend OtherM 

   refine M do 
     def refine_method 
       "refine_method" 
     end 
   end 
   using M 

   def hoge 
     # Error: `hoge': undefined local variable or method `refine_method' for #<X:0x00007fa05a024390> (NameError) 
     refine_method 
   end 
 end 

 class X 
   include M 
 end 

 # Error 
 pp X.new.hoge 
 ``` 


 ## Environment 

 Reproduced in the following environment. 

 ```ruby 
 RUBY_VERSION    # => "2.7.0" 
 RUBY_REVISION # => "02dfa0f16361c498e0f529054b00e3e09730892b" 
 RUBY_PLATFORM # => "x86_64-darwin17" 
 ``` 

 You can also confirm that it is reproduced here. 
 https://wandbox.org/permlink/I6tQesDRntT7JZqB https://wandbox.org/permlink/e73sVBRWQBfXP3zH 

Back