From: ko1@... Date: 2015-05-28T09:22:21+00:00 Subject: [ruby-core:69391] [Ruby trunk - Bug #11182] Refinement with alias causes strange behavior Issue #11182 has been updated by Koichi Sasada. File 6.PNG added File 7.PNG added I wrote pictures again for original examples D, C and M. ![(1) Like module include model (on original example)](6.PNG) ![(2) Method selector model (on original example)](7.PNG) In this case, I think both are acceptable (calling C#foo directly or M::C#foo). Why you say "It must be C#foo"? Or model (2) is wrong model? > We already established in past discussions about refinements that the class's actual method table (and methods that query or manipulate it) should not reflect refinements, since that would require them to be aware of the caller's scope. It is just MRI do (selector model, I wrote). We choose this because we don't have any penalty if nobody use refinements. (this is based on this assumption: only a few people use refinements) ---------------------------------------- Bug #11182: Refinement with alias causes strange behavior https://bugs.ruby-lang.org/issues/11182#change-52667 * Author: Koichi Sasada * Status: Feedback * Priority: Normal * Assignee: Koichi Sasada * ruby -v: 2.3dev * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The following script causes strange behavior. ```ruby class C def foo p "C" end end module M refine C do def foo p "Refiend C" end end end class D < C alias bar foo end using M D.new.bar #=> t.rb:21:in `
': undefined method `bar' for # (NoMethodError) ``` It seems strange. Maybe (1) C#foo or (2) M#C#foo should be called. But I'm not sure which is suitable. Previous versions: ``` ruby 2.0.0p606 (2014-11-28 revision 48636) [i386-mswin32_110] t.rb:9: warning: Refinements are experimental, and the behavior may change in future versions of Ruby! "C" ruby 2.1.5p312 (2015-03-10 revision 49912) [i386-mswin32_110] "C" ``` ---Files-------------------------------- 1.PNG (38.7 KB) 2.PNG (43.7 KB) 4.PNG (38.5 KB) 3.PNG (37.9 KB) alias_affected_by_original_refinement.diff (1.34 KB) 6.PNG (36.6 KB) 7.PNG (40.7 KB) -- https://bugs.ruby-lang.org/